{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a target=\"_blank\" href=\"https://colab.research.google.com/github/AI4Finance-Foundation/FinRL-Tutorials/blob/master/5-Others/FinRL_demo_docker.ipynb\">\n",
    "  <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\n",
    "</a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "pYfqSepj-Vdu",
    "outputId": "b8d53f0f-a67c-40c8-f145-386932bb4c00"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting git+https://github.com/AI4Finance-LLC/FinRL-Library.git\n",
      "  Cloning https://github.com/AI4Finance-LLC/FinRL-Library.git to /tmp/pip-req-build-6wytvr8h\n",
      "  Running command git clone -q https://github.com/AI4Finance-LLC/FinRL-Library.git /tmp/pip-req-build-6wytvr8h\n",
      "Collecting pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2\n",
      "  Cloning https://github.com/quantopian/pyfolio.git to /tmp/pip-install-5mvwtjod/pyfolio_38ee337621da4a0fa2d405ed79f6da0e\n",
      "  Running command git clone -q https://github.com/quantopian/pyfolio.git /tmp/pip-install-5mvwtjod/pyfolio_38ee337621da4a0fa2d405ed79f6da0e\n",
      "Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (1.19.5)\n",
      "Requirement already satisfied: pandas>=1.1.5 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (1.1.5)\n",
      "Collecting stockstats\n",
      "  Downloading stockstats-0.3.2-py2.py3-none-any.whl (13 kB)\n",
      "Collecting yfinance\n",
      "  Downloading yfinance-0.1.63.tar.gz (26 kB)\n",
      "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (3.2.2)\n",
      "Requirement already satisfied: scikit-learn>=0.21.0 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (0.22.2.post1)\n",
      "Requirement already satisfied: gym>=0.17 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (0.17.3)\n",
      "Collecting stable-baselines3[extra]\n",
      "  Downloading stable_baselines3-1.1.0-py3-none-any.whl (172 kB)\n",
      "\u001b[K     |████████████████████████████████| 172 kB 7.0 MB/s \n",
      "\u001b[?25hCollecting ray[default]\n",
      "  Downloading ray-1.6.0-cp37-cp37m-manylinux2014_x86_64.whl (49.6 MB)\n",
      "\u001b[K     |████████████████████████████████| 49.6 MB 6.7 kB/s \n",
      "\u001b[?25hCollecting lz4\n",
      "  Downloading lz4-3.1.3-cp37-cp37m-manylinux2010_x86_64.whl (1.8 MB)\n",
      "\u001b[K     |████████████████████████████████| 1.8 MB 43.2 MB/s \n",
      "\u001b[?25hCollecting tensorboardX\n",
      "  Downloading tensorboardX-2.4-py2.py3-none-any.whl (124 kB)\n",
      "\u001b[K     |████████████████████████████████| 124 kB 70.4 MB/s \n",
      "\u001b[?25hCollecting gputil\n",
      "  Downloading GPUtil-1.4.0.tar.gz (5.5 kB)\n",
      "Collecting trading_calendars\n",
      "  Downloading trading_calendars-2.1.1.tar.gz (108 kB)\n",
      "\u001b[K     |████████████████████████████████| 108 kB 44.2 MB/s \n",
      "\u001b[?25hCollecting alpaca_trade_api\n",
      "  Downloading alpaca_trade_api-1.2.3-py3-none-any.whl (40 kB)\n",
      "\u001b[K     |████████████████████████████████| 40 kB 5.1 MB/s \n",
      "\u001b[?25hCollecting ccxt\n",
      "  Downloading ccxt-1.55.56-py2.py3-none-any.whl (2.0 MB)\n",
      "\u001b[K     |████████████████████████████████| 2.0 MB 43.1 MB/s \n",
      "\u001b[?25hCollecting jqdatasdk\n",
      "  Downloading jqdatasdk-1.8.10-py3-none-any.whl (153 kB)\n",
      "\u001b[K     |████████████████████████████████| 153 kB 68.6 MB/s \n",
      "\u001b[?25hCollecting wrds\n",
      "  Downloading wrds-3.1.0-py3-none-any.whl (12 kB)\n",
      "Requirement already satisfied: pytest in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (3.6.4)\n",
      "Requirement already satisfied: setuptools>=41.4.0 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (57.4.0)\n",
      "Requirement already satisfied: wheel>=0.33.6 in /usr/local/lib/python3.7/dist-packages (from finrl==0.3.0) (0.37.0)\n",
      "Requirement already satisfied: ipython>=3.2.3 in /usr/local/lib/python3.7/dist-packages (from pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (5.5.0)\n",
      "Requirement already satisfied: pytz>=2014.10 in /usr/local/lib/python3.7/dist-packages (from pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (2018.9)\n",
      "Requirement already satisfied: scipy>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (1.4.1)\n",
      "Requirement already satisfied: seaborn>=0.7.1 in /usr/local/lib/python3.7/dist-packages (from pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.11.1)\n",
      "Collecting empyrical>=0.5.0\n",
      "  Downloading empyrical-0.5.5.tar.gz (52 kB)\n",
      "\u001b[K     |████████████████████████████████| 52 kB 1.6 MB/s \n",
      "\u001b[?25hRequirement already satisfied: pandas-datareader>=0.2 in /usr/local/lib/python3.7/dist-packages (from empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.9.0)\n",
      "Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in /usr/local/lib/python3.7/dist-packages (from gym>=0.17->finrl==0.3.0) (1.3.0)\n",
      "Requirement already satisfied: pyglet<=1.5.0,>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from gym>=0.17->finrl==0.3.0) (1.5.0)\n",
      "Requirement already satisfied: decorator in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (4.4.2)\n",
      "Requirement already satisfied: prompt-toolkit<2.0.0,>=1.0.4 in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (1.0.18)\n",
      "Requirement already satisfied: simplegeneric>0.8 in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.8.1)\n",
      "Requirement already satisfied: pexpect in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (4.8.0)\n",
      "Requirement already satisfied: pickleshare in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.7.5)\n",
      "Requirement already satisfied: traitlets>=4.2 in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (5.0.5)\n",
      "Requirement already satisfied: pygments in /usr/local/lib/python3.7/dist-packages (from ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (2.6.1)\n",
      "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->finrl==0.3.0) (2.8.2)\n",
      "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->finrl==0.3.0) (2.4.7)\n",
      "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->finrl==0.3.0) (0.10.0)\n",
      "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->finrl==0.3.0) (1.3.1)\n",
      "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from cycler>=0.10->matplotlib->finrl==0.3.0) (1.15.0)\n",
      "Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.7/dist-packages (from pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (2.23.0)\n",
      "Requirement already satisfied: lxml in /usr/local/lib/python3.7/dist-packages (from pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (4.2.6)\n",
      "Requirement already satisfied: wcwidth in /usr/local/lib/python3.7/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.2.5)\n",
      "Requirement already satisfied: future in /usr/local/lib/python3.7/dist-packages (from pyglet<=1.5.0,>=1.4.0->gym>=0.17->finrl==0.3.0) (0.16.0)\n",
      "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (3.0.4)\n",
      "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (2.10)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (2021.5.30)\n",
      "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->pandas-datareader>=0.2->empyrical>=0.5.0->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (1.24.3)\n",
      "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.21.0->finrl==0.3.0) (1.0.1)\n",
      "Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.7/dist-packages (from traitlets>=4.2->ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.2.0)\n",
      "Collecting websockets<10,>=8.0\n",
      "  Downloading websockets-9.1-cp37-cp37m-manylinux2010_x86_64.whl (103 kB)\n",
      "\u001b[K     |████████████████████████████████| 103 kB 64.4 MB/s \n",
      "\u001b[?25hRequirement already satisfied: msgpack==1.0.2 in /usr/local/lib/python3.7/dist-packages (from alpaca_trade_api->finrl==0.3.0) (1.0.2)\n",
      "Collecting websocket-client<2,>=0.56.0\n",
      "  Downloading websocket_client-1.2.1-py2.py3-none-any.whl (52 kB)\n",
      "\u001b[K     |████████████████████████████████| 52 kB 1.3 MB/s \n",
      "\u001b[?25hCollecting aiohttp<3.8,>=3.7.4\n",
      "  Downloading aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl (1.3 MB)\n",
      "\u001b[K     |████████████████████████████████| 1.3 MB 64.5 MB/s \n",
      "\u001b[?25hCollecting aiodns>=1.1.1\n",
      "  Downloading aiodns-3.0.0-py3-none-any.whl (5.0 kB)\n",
      "Collecting yarl==1.6.3\n",
      "  Downloading yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl (294 kB)\n",
      "\u001b[K     |████████████████████████████████| 294 kB 60.1 MB/s \n",
      "\u001b[?25hCollecting cryptography>=2.6.1\n",
      "  Downloading cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl (3.0 MB)\n",
      "\u001b[K     |████████████████████████████████| 3.0 MB 42.9 MB/s \n",
      "\u001b[?25hRequirement already satisfied: typing-extensions>=3.7.4 in /usr/local/lib/python3.7/dist-packages (from yarl==1.6.3->ccxt->finrl==0.3.0) (3.7.4.3)\n",
      "Collecting multidict>=4.0\n",
      "  Downloading multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl (142 kB)\n",
      "\u001b[K     |████████████████████████████████| 142 kB 58.6 MB/s \n",
      "\u001b[?25hCollecting pycares>=4.0.0\n",
      "  Downloading pycares-4.0.0-cp37-cp37m-manylinux2010_x86_64.whl (291 kB)\n",
      "\u001b[K     |████████████████████████████████| 291 kB 45.6 MB/s \n",
      "\u001b[?25hRequirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp<3.8,>=3.7.4->ccxt->finrl==0.3.0) (21.2.0)\n",
      "Collecting async-timeout<4.0,>=3.0\n",
      "  Downloading async_timeout-3.0.1-py3-none-any.whl (8.2 kB)\n",
      "Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography>=2.6.1->ccxt->finrl==0.3.0) (1.14.6)\n",
      "Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography>=2.6.1->ccxt->finrl==0.3.0) (2.20)\n",
      "Collecting thriftpy2>=0.3.9\n",
      "  Downloading thriftpy2-0.4.14.tar.gz (361 kB)\n",
      "\u001b[K     |████████████████████████████████| 361 kB 48.3 MB/s \n",
      "\u001b[?25hRequirement already satisfied: SQLAlchemy>=1.2.8 in /usr/local/lib/python3.7/dist-packages (from jqdatasdk->finrl==0.3.0) (1.4.22)\n",
      "Collecting pymysql>=0.7.6\n",
      "  Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)\n",
      "\u001b[K     |████████████████████████████████| 43 kB 1.9 MB/s \n",
      "\u001b[?25hRequirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from SQLAlchemy>=1.2.8->jqdatasdk->finrl==0.3.0) (4.6.4)\n",
      "Requirement already satisfied: greenlet!=0.4.17 in /usr/local/lib/python3.7/dist-packages (from SQLAlchemy>=1.2.8->jqdatasdk->finrl==0.3.0) (1.1.1)\n",
      "Collecting ply<4.0,>=3.4\n",
      "  Downloading ply-3.11-py2.py3-none-any.whl (49 kB)\n",
      "\u001b[K     |████████████████████████████████| 49 kB 5.7 MB/s \n",
      "\u001b[?25hRequirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->SQLAlchemy>=1.2.8->jqdatasdk->finrl==0.3.0) (3.5.0)\n",
      "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.7/dist-packages (from pexpect->ipython>=3.2.3->pyfolio@ git+https://github.com/quantopian/pyfolio.git#egg=pyfolio-0.9.2->finrl==0.3.0) (0.7.0)\n",
      "Requirement already satisfied: atomicwrites>=1.0 in /usr/local/lib/python3.7/dist-packages (from pytest->finrl==0.3.0) (1.4.0)\n",
      "Requirement already satisfied: py>=1.5.0 in /usr/local/lib/python3.7/dist-packages (from pytest->finrl==0.3.0) (1.10.0)\n",
      "Requirement already satisfied: pluggy<0.8,>=0.5 in /usr/local/lib/python3.7/dist-packages (from pytest->finrl==0.3.0) (0.7.1)\n",
      "Requirement already satisfied: more-itertools>=4.0.0 in /usr/local/lib/python3.7/dist-packages (from pytest->finrl==0.3.0) (8.8.0)\n",
      "Requirement already satisfied: grpcio>=1.28.1 in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (1.39.0)\n",
      "Requirement already satisfied: protobuf>=3.15.3 in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (3.17.3)\n",
      "Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (3.13)\n",
      "Requirement already satisfied: click>=7.0 in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (7.1.2)\n",
      "Requirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (3.0.12)\n",
      "Collecting redis>=3.5.0\n",
      "  Downloading redis-3.5.3-py2.py3-none-any.whl (72 kB)\n",
      "\u001b[K     |████████████████████████████████| 72 kB 540 kB/s \n",
      "\u001b[?25hCollecting gpustat\n",
      "  Downloading gpustat-0.6.0.tar.gz (78 kB)\n",
      "\u001b[K     |████████████████████████████████| 78 kB 6.7 MB/s \n",
      "\u001b[?25hCollecting aiohttp-cors\n",
      "  Downloading aiohttp_cors-0.7.0-py3-none-any.whl (27 kB)\n",
      "Collecting opencensus\n",
      "  Downloading opencensus-0.7.13-py2.py3-none-any.whl (127 kB)\n",
      "\u001b[K     |████████████████████████████████| 127 kB 57.3 MB/s \n",
      "\u001b[?25hCollecting py-spy>=0.2.0\n",
      "  Downloading py_spy-0.3.8-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (3.1 MB)\n",
      "\u001b[K     |████████████████████████████████| 3.1 MB 52.9 MB/s \n",
      "\u001b[?25hCollecting colorful\n",
      "  Downloading colorful-0.5.4-py2.py3-none-any.whl (201 kB)\n",
      "\u001b[K     |████████████████████████████████| 201 kB 67.4 MB/s \n",
      "\u001b[?25hRequirement already satisfied: jsonschema in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (2.6.0)\n",
      "Requirement already satisfied: prometheus-client>=0.7.1 in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (0.11.0)\n",
      "Collecting aioredis<2\n",
      "  Downloading aioredis-1.3.1-py3-none-any.whl (65 kB)\n",
      "\u001b[K     |████████████████████████████████| 65 kB 3.8 MB/s \n",
      "\u001b[?25hCollecting hiredis\n",
      "  Downloading hiredis-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl (85 kB)\n",
      "\u001b[K     |████████████████████████████████| 85 kB 4.1 MB/s \n",
      "\u001b[?25hRequirement already satisfied: nvidia-ml-py3>=7.352.0 in /usr/local/lib/python3.7/dist-packages (from gpustat->ray[default]->finrl==0.3.0) (7.352.0)\n",
      "Requirement already satisfied: psutil in /usr/local/lib/python3.7/dist-packages (from gpustat->ray[default]->finrl==0.3.0) (5.4.8)\n",
      "Collecting blessings>=1.6\n",
      "  Downloading blessings-1.7-py3-none-any.whl (18 kB)\n",
      "Collecting opencensus-context==0.1.2\n",
      "  Downloading opencensus_context-0.1.2-py2.py3-none-any.whl (4.4 kB)\n",
      "Requirement already satisfied: google-api-core<2.0.0,>=1.0.0 in /usr/local/lib/python3.7/dist-packages (from opencensus->ray[default]->finrl==0.3.0) (1.26.3)\n",
      "Requirement already satisfied: google-auth<2.0dev,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (1.34.0)\n",
      "Requirement already satisfied: packaging>=14.3 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (21.0)\n",
      "Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (1.53.0)\n",
      "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<2.0dev,>=1.21.1->google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (4.7.2)\n",
      "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<2.0dev,>=1.21.1->google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (4.2.2)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<2.0dev,>=1.21.1->google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (0.2.8)\n",
      "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<2.0dev,>=1.21.1->google-api-core<2.0.0,>=1.0.0->opencensus->ray[default]->finrl==0.3.0) (0.4.8)\n",
      "Requirement already satisfied: tabulate in /usr/local/lib/python3.7/dist-packages (from ray[default]->finrl==0.3.0) (0.8.9)\n",
      "Requirement already satisfied: torch>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from stable-baselines3[extra]->finrl==0.3.0) (1.9.0+cu102)\n",
      "Requirement already satisfied: pillow in /usr/local/lib/python3.7/dist-packages (from stable-baselines3[extra]->finrl==0.3.0) (7.1.2)\n",
      "Requirement already satisfied: tensorboard>=2.2.0 in /usr/local/lib/python3.7/dist-packages (from stable-baselines3[extra]->finrl==0.3.0) (2.6.0)\n",
      "Requirement already satisfied: atari-py~=0.2.0 in /usr/local/lib/python3.7/dist-packages (from stable-baselines3[extra]->finrl==0.3.0) (0.2.9)\n",
      "Requirement already satisfied: opencv-python in /usr/local/lib/python3.7/dist-packages (from stable-baselines3[extra]->finrl==0.3.0) (4.1.2.30)\n",
      "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (0.4.5)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (1.0.1)\n",
      "Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (0.12.0)\n",
      "Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (0.6.1)\n",
      "Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (1.8.0)\n",
      "Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (3.3.4)\n",
      "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (1.3.0)\n",
      "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.2.0->stable-baselines3[extra]->finrl==0.3.0) (3.1.1)\n",
      "Collecting int-date>=0.1.7\n",
      "  Downloading int_date-0.1.8-py2.py3-none-any.whl (5.0 kB)\n",
      "Requirement already satisfied: toolz in /usr/local/lib/python3.7/dist-packages (from trading_calendars->finrl==0.3.0) (0.11.1)\n",
      "Collecting mock\n",
      "  Downloading mock-4.0.3-py3-none-any.whl (28 kB)\n",
      "Collecting psycopg2-binary\n",
      "  Downloading psycopg2_binary-2.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)\n",
      "\u001b[K     |████████████████████████████████| 3.4 MB 42.0 MB/s \n",
      "\u001b[?25hRequirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance->finrl==0.3.0) (0.0.9)\n",
      "Collecting lxml\n",
      "  Downloading lxml-4.6.3-cp37-cp37m-manylinux2014_x86_64.whl (6.3 MB)\n",
      "\u001b[K     |████████████████████████████████| 6.3 MB 73.5 MB/s \n",
      "\u001b[?25hBuilding wheels for collected packages: finrl, pyfolio, empyrical, gputil, thriftpy2, gpustat, trading-calendars, yfinance\n",
      "  Building wheel for finrl (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for finrl: filename=finrl-0.3.0-py3-none-any.whl size=72797 sha256=b158c2a716f1f475ecd6febac371f743f414c8441e87cb69c2ea864a468673a9\n",
      "  Stored in directory: /tmp/pip-ephem-wheel-cache-o7cnzz9o/wheels/17/ff/bd/1bc602a0352762b0b24041b88536d803ae343ed0a711fcf55e\n",
      "  Building wheel for pyfolio (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for pyfolio: filename=pyfolio-0.9.2+75.g4b901f6-py3-none-any.whl size=75775 sha256=0e3bccb00f48248010599a524d8785e3f88d6d4ed207a829926094d1c748091d\n",
      "  Stored in directory: /tmp/pip-ephem-wheel-cache-o7cnzz9o/wheels/ef/09/e5/2c1bf37c050d22557c080deb1be986d06424627c04aeca19b9\n",
      "  Building wheel for empyrical (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for empyrical: filename=empyrical-0.5.5-py3-none-any.whl size=39777 sha256=ac7509ce0caa4d6c96e5e0de8f2bcb5d10fac7ff1b26db1eb8fd2c12cefa811c\n",
      "  Stored in directory: /root/.cache/pip/wheels/d9/91/4b/654fcff57477efcf149eaca236da2fce991526cbab431bf312\n",
      "  Building wheel for gputil (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for gputil: filename=GPUtil-1.4.0-py3-none-any.whl size=7411 sha256=10a00736736d2a527b646d513261888d8955d5bdfc8b63c422698d3606608525\n",
      "  Stored in directory: /root/.cache/pip/wheels/6e/f8/83/534c52482d6da64622ddbf72cd93c35d2ef2881b78fd08ff0c\n",
      "  Building wheel for thriftpy2 (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for thriftpy2: filename=thriftpy2-0.4.14-cp37-cp37m-linux_x86_64.whl size=940446 sha256=e141a7186ff151091bfd02d0bcf710d96c00f5fa36b90cdffa46d241b15e7c4a\n",
      "  Stored in directory: /root/.cache/pip/wheels/2a/f5/49/9c0d851aa64b58db72883cf9393cc824d536bdf13f5c83cff4\n",
      "  Building wheel for gpustat (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for gpustat: filename=gpustat-0.6.0-py3-none-any.whl size=12617 sha256=fd2d03fc490fdcf89ed0c9e418d2b0d2f5037abe522604280956b54e95b700e2\n",
      "  Stored in directory: /root/.cache/pip/wheels/e6/67/af/f1ad15974b8fd95f59a63dbf854483ebe5c7a46a93930798b8\n",
      "  Building wheel for trading-calendars (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for trading-calendars: filename=trading_calendars-2.1.1-py3-none-any.whl size=140937 sha256=5ccc9b7a0cc2fe883e765634ec7fff0f9b169e28a68cbe34352d38900583aa61\n",
      "  Stored in directory: /root/.cache/pip/wheels/62/9c/d1/46a21e1b99e064cba79b85e9f95e6a208ac5ba4c29ae5962ec\n",
      "  Building wheel for yfinance (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Created wheel for yfinance: filename=yfinance-0.1.63-py2.py3-none-any.whl size=23918 sha256=d01e601c1e260fbf209388ad0df0bfc7634233e771a5b0c0999ccfbf0ec94d33\n",
      "  Stored in directory: /root/.cache/pip/wheels/fe/87/8b/7ec24486e001d3926537f5f7801f57a74d181be25b11157983\n",
      "Successfully built finrl pyfolio empyrical gputil thriftpy2 gpustat trading-calendars yfinance\n",
      "Installing collected packages: multidict, yarl, lxml, async-timeout, redis, pycares, ply, opencensus-context, hiredis, blessings, aiohttp, websockets, websocket-client, thriftpy2, tensorboardX, stable-baselines3, ray, pymysql, py-spy, psycopg2-binary, opencensus, mock, int-date, gpustat, empyrical, cryptography, colorful, aioredis, aiohttp-cors, aiodns, yfinance, wrds, trading-calendars, stockstats, pyfolio, lz4, jqdatasdk, gputil, ccxt, alpaca-trade-api, finrl\n",
      "  Attempting uninstall: lxml\n",
      "    Found existing installation: lxml 4.2.6\n",
      "    Uninstalling lxml-4.2.6:\n",
      "      Successfully uninstalled lxml-4.2.6\n",
      "Successfully installed aiodns-3.0.0 aiohttp-3.7.4.post0 aiohttp-cors-0.7.0 aioredis-1.3.1 alpaca-trade-api-1.2.3 async-timeout-3.0.1 blessings-1.7 ccxt-1.55.56 colorful-0.5.4 cryptography-3.4.8 empyrical-0.5.5 finrl-0.3.0 gpustat-0.6.0 gputil-1.4.0 hiredis-2.0.0 int-date-0.1.8 jqdatasdk-1.8.10 lxml-4.6.3 lz4-3.1.3 mock-4.0.3 multidict-5.1.0 opencensus-0.7.13 opencensus-context-0.1.2 ply-3.11 psycopg2-binary-2.9.1 py-spy-0.3.8 pycares-4.0.0 pyfolio-0.9.2+75.g4b901f6 pymysql-1.0.2 ray-1.6.0 redis-3.5.3 stable-baselines3-1.1.0 stockstats-0.3.2 tensorboardX-2.4 thriftpy2-0.4.14 trading-calendars-2.1.1 websocket-client-1.2.1 websockets-9.1 wrds-3.1.0 yarl-1.6.3 yfinance-0.1.63\n"
     ]
    }
   ],
   "source": [
    "# ## install finrl library\n",
    "!pip install wrds\n",
    "!pip install swig\n",
    "!pip install git+https://github.com/AI4Finance-Foundation/FinRL.git"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "sApkDlD9LIZv"
   },
   "source": [
    "<a id='0'></a>\n",
    "# Part 1. Problem Definition"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "HjLD2TZSLKZ-"
   },
   "source": [
    "This problem is to design an automated trading solution for single stock trading. We model the stock trading process as a Markov Decision Process (MDP). We then formulate our trading goal as a maximization problem.\n",
    "\n",
    "The algorithm is trained using Deep Reinforcement Learning (DRL) algorithms and the components of the reinforcement learning environment are:\n",
    "\n",
    "\n",
    "* Action: The action space describes the allowed actions that the agent interacts with the\n",
    "environment. Normally, a ∈ A includes three actions: a ∈ {−1, 0, 1}, where −1, 0, 1 represent\n",
    "selling, holding, and buying one stock. Also, an action can be carried upon multiple shares. We use\n",
    "an action space {−k, ..., −1, 0, 1, ..., k}, where k denotes the number of shares. For example, \"Buy\n",
    "10 shares of AAPL\" or \"Sell 10 shares of AAPL\" are 10 or −10, respectively\n",
    "\n",
    "* Reward function: r(s, a, s′) is the incentive mechanism for an agent to learn a better action. The change of the portfolio value when action a is taken at state s and arriving at new state s',  i.e., r(s, a, s′) = v′ − v, where v′ and v represent the portfolio\n",
    "values at state s′ and s, respectively\n",
    "\n",
    "* State: The state space describes the observations that the agent receives from the environment. Just as a human trader needs to analyze various information before executing a trade, so\n",
    "our trading agent observes many different features to better learn in an interactive environment.\n",
    "\n",
    "* Environment: Dow 30 consituents\n",
    "\n",
    "\n",
    "The data of the single stock that we will be using for this case study is obtained from Yahoo Finance API. The data contains Open-High-Low-Close price and volume.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Ffsre789LY08"
   },
   "source": [
    "<a id='1'></a>\n",
    "# Part 2. Getting Started- ASSUMES USING DOCKER, see readme for instructions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Uy5_PTmOh1hj"
   },
   "source": [
    "<a id='1.1'></a>\n",
    "## 2.1. Add FinRL to your path. You can of course install it as a pipy package, but this is for development purposes.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "mPT0ipYE28wL"
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "\n",
    "sys.path.append(\"..\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "yH-5pui07W74",
    "outputId": "fd0091d8-3c87-4e99-fc32-67a480a1bdcb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.1.5\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "print(pd.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "osBHhVysOEzi"
   },
   "source": [
    "\n",
    "<a id='1.2'></a>\n",
    "## 2.2. Check if the additional packages needed are present, if not install them. \n",
    "* Yahoo Finance API\n",
    "* pandas\n",
    "* numpy\n",
    "* matplotlib\n",
    "* stockstats\n",
    "* OpenAI gym\n",
    "* stable-baselines\n",
    "* tensorflow\n",
    "* pyfolio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "nGv01K8Sh1hn"
   },
   "source": [
    "<a id='1.3'></a>\n",
    "## 2.3. Import Packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "lPqeTTwoh1hn",
    "outputId": "66f4fc56-9169-413b-afaf-943af24e405d"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/dist-packages/pyfolio/pos.py:27: UserWarning: Module \"zipline.assets\" not found; multipliers will not be applied to position notionals.\n",
      "  'Module \"zipline.assets\" not found; multipliers will not be applied'\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "# matplotlib.use('Agg')\n",
    "import datetime\n",
    "\n",
    "%matplotlib inline\n",
    "from finrl import config\n",
    "from finrl import config_tickers\n",
    "from finrl.neo_finrl.preprocessor.yahoodownloader import YahooDownloader\n",
    "from finrl.neo_finrl.preprocessor.preprocessors import FeatureEngineer, data_split\n",
    "from finrl.neo_finrl.env_stock_trading.env_stocktrading import StockTradingEnv\n",
    "from finrl.neo_finrl.env_stock_trading.env_stocktrading_np import StockTradingEnv as StockTradingEnv_numpy\n",
    "from finrl.agents.stablebaselines3.models import DRLAgent\n",
    "from finrl.agents.rllib.models import DRLAgent as DRLAgent_rllib\n",
    "from finrl.neo_finrl.data_processor import DataProcessor\n",
    "\n",
    "\n",
    "from finrl.plot import backtest_stats, backtest_plot, get_daily_return, get_baseline\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "T2owTj985RW4"
   },
   "source": [
    "<a id='1.4'></a>\n",
    "## 2.4. Create Folders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "id": "w9A8CN5R5PuZ"
   },
   "outputs": [],
   "source": [
    "import os\n",
    "if not os.path.exists(\"./\" + config.DATA_SAVE_DIR):\n",
    "    os.makedirs(\"./\" + config.DATA_SAVE_DIR)\n",
    "if not os.path.exists(\"./\" + config.TRAINED_MODEL_DIR):\n",
    "    os.makedirs(\"./\" + config.TRAINED_MODEL_DIR)\n",
    "if not os.path.exists(\"./\" + config.TENSORBOARD_LOG_DIR):\n",
    "    os.makedirs(\"./\" + config.TENSORBOARD_LOG_DIR)\n",
    "if not os.path.exists(\"./\" + config.RESULTS_DIR):\n",
    "    os.makedirs(\"./\" + config.RESULTS_DIR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "A289rQWMh1hq"
   },
   "source": [
    "<a id='2'></a>\n",
    "# Part 3. Download Data\n",
    "Yahoo Finance is a website that provides stock data, financial news, financial reports, etc. All the data provided by Yahoo Finance is free.\n",
    "* FinRL uses a class **YahooDownloader** to fetch data from Yahoo Finance API\n",
    "* Call Limit: Using the Public API (without authentication), you are limited to 2,000 requests per hour per IP (or up to a total of 48,000 requests a day).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "NPeQ7iS-LoMm"
   },
   "source": [
    "\n",
    "\n",
    "-----\n",
    "class YahooDownloader:\n",
    "    Provides methods for retrieving daily stock data from\n",
    "    Yahoo Finance API\n",
    "\n",
    "    Attributes\n",
    "    ----------\n",
    "        start_date : str\n",
    "            start date of the data (modified from config.py)\n",
    "        end_date : str\n",
    "            end date of the data (modified from config.py)\n",
    "        ticker_list : list\n",
    "            a list of stock tickers (modified from config.py)\n",
    "\n",
    "    Methods\n",
    "    -------\n",
    "    fetch_data()\n",
    "        Fetches data from yahoo API\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 35
    },
    "id": "h3XJnvrbLp-C",
    "outputId": "f4ced262-1040-409c-fef9-b24fabce0677"
   },
   "outputs": [
    {
     "data": {
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "string"
      },
      "text/plain": [
       "'2009-01-01'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# from config.py start_date is a string\n",
    "config.START_DATE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 35
    },
    "id": "FUnY8WEfLq3C",
    "outputId": "92ef5b70-f693-4311-8e28-504ed92036f2"
   },
   "outputs": [
    {
     "data": {
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "string"
      },
      "text/plain": [
       "'2021-01-01'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# from config.py end_date is a string\n",
    "config.END_DATE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "JzqRRTOX6aFu",
    "outputId": "b69b9fbe-c834-4b00-c2c4-14ab25c247c0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['AAPL', 'MSFT', 'JPM', 'V', 'RTX', 'PG', 'GS', 'NKE', 'DIS', 'AXP', 'HD', 'INTC', 'WMT', 'IBM', 'MRK', 'UNH', 'KO', 'CAT', 'TRV', 'JNJ', 'CVX', 'MCD', 'VZ', 'CSCO', 'XOM', 'BA', 'MMM', 'PFE', 'WBA', 'DD']\n"
     ]
    }
   ],
   "source": [
    "print(config_tickers.DOW_30_TICKER)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "yCKm4om-s9kE",
    "outputId": "d1437148-bed1-4717-99c3-0d3a16629d21"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "Shape of DataFrame:  (90630, 8)\n"
     ]
    }
   ],
   "source": [
    "df = YahooDownloader(start_date = '2009-01-01',\n",
    "                     end_date = '2021-01-01',\n",
    "                     ticker_list = config_tickers.DOW_30_TICKER).fetch_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "CV3HrZHLh1hy",
    "outputId": "537e0177-d6e3-4faa-d218-e2ca0c7ad2eb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(90630, 8)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 204
    },
    "id": "4hYkeaPiICHS",
    "outputId": "eae33bae-79ad-4c88-fc93-0533e6f30dcc"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>tic</th>\n",
       "      <th>day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>3.067143</td>\n",
       "      <td>3.251429</td>\n",
       "      <td>3.041429</td>\n",
       "      <td>2.782837</td>\n",
       "      <td>746015200</td>\n",
       "      <td>AAPL</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>18.570000</td>\n",
       "      <td>19.520000</td>\n",
       "      <td>18.400000</td>\n",
       "      <td>15.657365</td>\n",
       "      <td>10955700</td>\n",
       "      <td>AXP</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>42.799999</td>\n",
       "      <td>45.560001</td>\n",
       "      <td>42.779999</td>\n",
       "      <td>33.941101</td>\n",
       "      <td>7010200</td>\n",
       "      <td>BA</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>44.910000</td>\n",
       "      <td>46.980000</td>\n",
       "      <td>44.709999</td>\n",
       "      <td>32.655109</td>\n",
       "      <td>7117200</td>\n",
       "      <td>CAT</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>16.410000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>16.250000</td>\n",
       "      <td>12.505757</td>\n",
       "      <td>40980600</td>\n",
       "      <td>CSCO</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date       open       high        low      close     volume   tic  day\n",
       "0  2009-01-02   3.067143   3.251429   3.041429   2.782837  746015200  AAPL    4\n",
       "1  2009-01-02  18.570000  19.520000  18.400000  15.657365   10955700   AXP    4\n",
       "2  2009-01-02  42.799999  45.560001  42.779999  33.941101    7010200    BA    4\n",
       "3  2009-01-02  44.910000  46.980000  44.709999  32.655109    7117200   CAT    4\n",
       "4  2009-01-02  16.410000  17.000000  16.250000  12.505757   40980600  CSCO    4"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(['date','tic'],ignore_index=True).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uqC6c40Zh1iH"
   },
   "source": [
    "# Part 4: Preprocess Data\n",
    "Data preprocessing is a crucial step for training a high quality machine learning model. We need to check for missing data and do feature engineering in order to convert the data into a model-ready state.\n",
    "* Add technical indicators. In practical trading, various information needs to be taken into account, for example the historical stock prices, current holding shares, technical indicators, etc. In this article, we demonstrate two trend-following technical indicators: MACD and RSI.\n",
    "* Add turbulence index. Risk-aversion reflects whether an investor will choose to preserve the capital. It also influences one's trading strategy when facing different market volatility level. To control the risk in a worst-case scenario, such as financial crisis of 2007–2008, FinRL employs the financial turbulence index that measures extreme asset price fluctuation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ri1OkRF-7W7-",
    "jupyter": {
     "outputs_hidden": false
    },
    "outputId": "f80830ef-8f46-4cf6-fc37-8dad69422668"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Successfully added technical indicators\n",
      "Successfully added turbulence index\n"
     ]
    }
   ],
   "source": [
    "fe = FeatureEngineer(\n",
    "                    use_technical_indicator=True,\n",
    "                    tech_indicator_list = config.INDICATORS,\n",
    "                    use_turbulence=True,\n",
    "                    user_defined_feature = False)\n",
    "\n",
    "processed = fe.preprocess_data(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 532
    },
    "id": "grvhGJJII3Xn",
    "outputId": "abc946cd-f470-4e00-c952-e66cd8322bb0"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>tic</th>\n",
       "      <th>day</th>\n",
       "      <th>macd</th>\n",
       "      <th>rsi_30</th>\n",
       "      <th>cci_30</th>\n",
       "      <th>dx_30</th>\n",
       "      <th>turbulence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>3.067143</td>\n",
       "      <td>3.251429</td>\n",
       "      <td>3.041429</td>\n",
       "      <td>2.782837</td>\n",
       "      <td>746015200</td>\n",
       "      <td>AAPL</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>18.570000</td>\n",
       "      <td>19.520000</td>\n",
       "      <td>18.400000</td>\n",
       "      <td>15.657365</td>\n",
       "      <td>10955700</td>\n",
       "      <td>AXP</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>42.799999</td>\n",
       "      <td>45.560001</td>\n",
       "      <td>42.779999</td>\n",
       "      <td>33.941101</td>\n",
       "      <td>7010200</td>\n",
       "      <td>BA</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>44.910000</td>\n",
       "      <td>46.980000</td>\n",
       "      <td>44.709999</td>\n",
       "      <td>32.655109</td>\n",
       "      <td>7117200</td>\n",
       "      <td>CAT</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>16.410000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>16.250000</td>\n",
       "      <td>12.505757</td>\n",
       "      <td>40980600</td>\n",
       "      <td>CSCO</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>74.230003</td>\n",
       "      <td>77.300003</td>\n",
       "      <td>73.580002</td>\n",
       "      <td>46.178165</td>\n",
       "      <td>13695900</td>\n",
       "      <td>CVX</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>21.605234</td>\n",
       "      <td>22.060680</td>\n",
       "      <td>20.993229</td>\n",
       "      <td>15.219840</td>\n",
       "      <td>13251037</td>\n",
       "      <td>DD</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>22.760000</td>\n",
       "      <td>24.030001</td>\n",
       "      <td>22.500000</td>\n",
       "      <td>20.597496</td>\n",
       "      <td>9796600</td>\n",
       "      <td>DIS</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>84.019997</td>\n",
       "      <td>87.620003</td>\n",
       "      <td>82.190002</td>\n",
       "      <td>72.315208</td>\n",
       "      <td>14088500</td>\n",
       "      <td>GS</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>23.070000</td>\n",
       "      <td>24.190001</td>\n",
       "      <td>22.959999</td>\n",
       "      <td>17.705078</td>\n",
       "      <td>14902500</td>\n",
       "      <td>HD</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date       open       high  ...     cci_30  dx_30  turbulence\n",
       "0  2009-01-02   3.067143   3.251429  ...  66.666667  100.0         0.0\n",
       "1  2009-01-02  18.570000  19.520000  ...  66.666667  100.0         0.0\n",
       "2  2009-01-02  42.799999  45.560001  ...  66.666667  100.0         0.0\n",
       "3  2009-01-02  44.910000  46.980000  ...  66.666667  100.0         0.0\n",
       "4  2009-01-02  16.410000  17.000000  ...  66.666667  100.0         0.0\n",
       "5  2009-01-02  74.230003  77.300003  ...  66.666667  100.0         0.0\n",
       "6  2009-01-02  21.605234  22.060680  ...  66.666667  100.0         0.0\n",
       "7  2009-01-02  22.760000  24.030001  ...  66.666667  100.0         0.0\n",
       "8  2009-01-02  84.019997  87.620003  ...  66.666667  100.0         0.0\n",
       "9  2009-01-02  23.070000  24.190001  ...  66.666667  100.0         0.0\n",
       "\n",
       "[10 rows x 13 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "processed.sort_values(['date','tic'],ignore_index=True).head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-QsYaY0Dh1iw"
   },
   "source": [
    "<a id='4'></a>\n",
    "# Part 5. Design Environment\n",
    "Considering the stochastic and interactive nature of the automated stock trading tasks, a financial task is modeled as a **Markov Decision Process (MDP)** problem. The training process involves observing stock price change, taking an action and reward's calculation to have the agent adjusting its strategy accordingly. By interacting with the environment, the trading agent will derive a trading strategy with the maximized rewards as time proceeds.\n",
    "\n",
    "Our trading environments, based on OpenAI Gym framework, simulate live stock markets with real market data according to the principle of time-driven simulation.\n",
    "\n",
    "The action space describes the allowed actions that the agent interacts with the environment. Normally, action a includes three actions: {-1, 0, 1}, where -1, 0, 1 represent selling, holding, and buying one share. Also, an action can be carried upon multiple shares. We use an action space {-k,…,-1, 0, 1, …, k}, where k denotes the number of shares to buy and -k denotes the number of shares to sell. For example, \"Buy 10 shares of AAPL\" or \"Sell 10 shares of AAPL\" are 10 or -10, respectively. The continuous action space needs to be normalized to [-1, 1], since the policy is defined on a Gaussian distribution, which needs to be normalized and symmetric."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5TOhcryx44bb"
   },
   "source": [
    "## Training data split: 2009-01-01 to 2018-12-31\n",
    "## Trade data split: 2019-01-01 to 2020-09-30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "W0qaVGjLtgbI",
    "outputId": "6d0b9f69-fc8d-47b2-c6f5-9f53f4d403eb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "75480\n",
      "15150\n"
     ]
    }
   ],
   "source": [
    "train = data_split(processed, '2009-01-01','2019-01-01')\n",
    "trade = data_split(processed, '2019-01-01','2021-01-01')\n",
    "print(len(train))\n",
    "print(len(trade))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 290
    },
    "id": "p52zNCOhTtLR",
    "outputId": "62da34f9-3c83-4f30-bd3c-0ada060c1248"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>tic</th>\n",
       "      <th>day</th>\n",
       "      <th>macd</th>\n",
       "      <th>rsi_30</th>\n",
       "      <th>cci_30</th>\n",
       "      <th>dx_30</th>\n",
       "      <th>turbulence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>3.067143</td>\n",
       "      <td>3.251429</td>\n",
       "      <td>3.041429</td>\n",
       "      <td>2.782837</td>\n",
       "      <td>746015200</td>\n",
       "      <td>AAPL</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>18.570000</td>\n",
       "      <td>19.520000</td>\n",
       "      <td>18.400000</td>\n",
       "      <td>15.657365</td>\n",
       "      <td>10955700</td>\n",
       "      <td>AXP</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>42.799999</td>\n",
       "      <td>45.560001</td>\n",
       "      <td>42.779999</td>\n",
       "      <td>33.941101</td>\n",
       "      <td>7010200</td>\n",
       "      <td>BA</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>44.910000</td>\n",
       "      <td>46.980000</td>\n",
       "      <td>44.709999</td>\n",
       "      <td>32.655109</td>\n",
       "      <td>7117200</td>\n",
       "      <td>CAT</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>16.410000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>16.250000</td>\n",
       "      <td>12.505757</td>\n",
       "      <td>40980600</td>\n",
       "      <td>CSCO</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date       open       high  ...     cci_30  dx_30  turbulence\n",
       "0  2009-01-02   3.067143   3.251429  ...  66.666667  100.0         0.0\n",
       "0  2009-01-02  18.570000  19.520000  ...  66.666667  100.0         0.0\n",
       "0  2009-01-02  42.799999  45.560001  ...  66.666667  100.0         0.0\n",
       "0  2009-01-02  44.910000  46.980000  ...  66.666667  100.0         0.0\n",
       "0  2009-01-02  16.410000  17.000000  ...  66.666667  100.0         0.0\n",
       "\n",
       "[5 rows x 13 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 310
    },
    "id": "k9zU9YaTTvFq",
    "outputId": "e2b20e70-f29b-4035-8fcc-08aa41098f79"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>tic</th>\n",
       "      <th>day</th>\n",
       "      <th>macd</th>\n",
       "      <th>rsi_30</th>\n",
       "      <th>cci_30</th>\n",
       "      <th>dx_30</th>\n",
       "      <th>turbulence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>38.722500</td>\n",
       "      <td>39.712502</td>\n",
       "      <td>38.557499</td>\n",
       "      <td>38.382229</td>\n",
       "      <td>148158800</td>\n",
       "      <td>AAPL</td>\n",
       "      <td>2</td>\n",
       "      <td>-2.010457</td>\n",
       "      <td>37.867363</td>\n",
       "      <td>-91.579434</td>\n",
       "      <td>42.250808</td>\n",
       "      <td>51.408868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>93.910004</td>\n",
       "      <td>96.269997</td>\n",
       "      <td>93.769997</td>\n",
       "      <td>91.803406</td>\n",
       "      <td>4175400</td>\n",
       "      <td>AXP</td>\n",
       "      <td>2</td>\n",
       "      <td>-3.394947</td>\n",
       "      <td>41.204996</td>\n",
       "      <td>-97.765841</td>\n",
       "      <td>26.709417</td>\n",
       "      <td>51.408868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>316.190002</td>\n",
       "      <td>323.950012</td>\n",
       "      <td>313.709991</td>\n",
       "      <td>314.645142</td>\n",
       "      <td>3292200</td>\n",
       "      <td>BA</td>\n",
       "      <td>2</td>\n",
       "      <td>-5.550592</td>\n",
       "      <td>47.010000</td>\n",
       "      <td>-21.712382</td>\n",
       "      <td>13.611972</td>\n",
       "      <td>51.408868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>124.029999</td>\n",
       "      <td>127.879997</td>\n",
       "      <td>123.000000</td>\n",
       "      <td>117.506577</td>\n",
       "      <td>4783200</td>\n",
       "      <td>CAT</td>\n",
       "      <td>2</td>\n",
       "      <td>-0.676421</td>\n",
       "      <td>48.229088</td>\n",
       "      <td>-5.177371</td>\n",
       "      <td>0.873482</td>\n",
       "      <td>51.408868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>42.279999</td>\n",
       "      <td>43.200001</td>\n",
       "      <td>42.209999</td>\n",
       "      <td>39.496738</td>\n",
       "      <td>23833500</td>\n",
       "      <td>CSCO</td>\n",
       "      <td>2</td>\n",
       "      <td>-0.939011</td>\n",
       "      <td>44.872565</td>\n",
       "      <td>-87.556999</td>\n",
       "      <td>29.529377</td>\n",
       "      <td>51.408868</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date        open        high  ...     cci_30      dx_30  turbulence\n",
       "0  2019-01-02   38.722500   39.712502  ... -91.579434  42.250808   51.408868\n",
       "0  2019-01-02   93.910004   96.269997  ... -97.765841  26.709417   51.408868\n",
       "0  2019-01-02  316.190002  323.950012  ... -21.712382  13.611972   51.408868\n",
       "0  2019-01-02  124.029999  127.879997  ...  -5.177371   0.873482   51.408868\n",
       "0  2019-01-02   42.279999   43.200001  ... -87.556999  29.529377   51.408868\n",
       "\n",
       "[5 rows x 13 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trade.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "zYN573SOHhxG",
    "outputId": "4c06c43b-e25a-48e6-b7d2-4d59201a0775"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['macd', 'rsi_30', 'cci_30', 'dx_30']"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "config.INDICATORS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "id": "hy_T5IzD7W8A"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from gym.utils import seeding\n",
    "import gym\n",
    "from gym import spaces\n",
    "import matplotlib\n",
    "from copy import deepcopy\n",
    "\n",
    "matplotlib.use(\"Agg\")\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle\n",
    "from stable_baselines3.common.vec_env import DummyVecEnv\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from gym.utils import seeding\n",
    "import gym\n",
    "from gym import spaces\n",
    "import matplotlib\n",
    "\n",
    "matplotlib.use(\"Agg\")\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle\n",
    "from stable_baselines3.common.vec_env import DummyVecEnv, SubprocVecEnv\n",
    "from stable_baselines3.common import logger\n",
    "\n",
    "class StockTradingEnvV2(gym.Env):\n",
    "    \n",
    "    \"\"\"\n",
    "    A stock trading environment for OpenAI gym\n",
    "    Parameters:\n",
    "    state space: {start_cash, <owned_shares>, for s in stocks{<stock.values>}, }\n",
    "        df (pandas.DataFrame): Dataframe containing data\n",
    "        transaction_cost (float): cost for buying or selling shares\n",
    "        hmax (int): max number of share purchases allowed per asset\n",
    "        turbulence_threshold (float): Maximum turbulence allowed in market for purchases to occur. If exceeded, positions are liquidated\n",
    "        print_verbosity(int): When iterating (step), how often to print stats about state of env\n",
    "        reward_scaling (float): Scaling value to multiply reward by at each step. \n",
    "        initial_amount: (int, float): Amount of cash initially available\n",
    "        daily_information_columns (list(str)): Columns to use when building state space from the dataframe. \n",
    "        out_of_cash_penalty (int, float): Penalty to apply if the algorithm runs out of cash\n",
    "    \n",
    "\n",
    "\n",
    "    tests:\n",
    "        after reset, static strategy should result in same metrics\n",
    "\n",
    "        buy zero should result in no costs, no assets purchased\n",
    "        given no change in prices, no change in asset values\n",
    "    \"\"\"\n",
    "    metadata = {\"render.modes\": [\"human\"]}\n",
    "\n",
    "    def __init__(\n",
    "        self,\n",
    "        df,\n",
    "        transaction_cost_pct=3e-3,\n",
    "        date_col_name=\"date\",\n",
    "        hmax=10,\n",
    "        turbulence_threshold=None,\n",
    "        print_verbosity=10,\n",
    "        reward_scaling=1e-4,\n",
    "        initial_amount=1e6,\n",
    "        daily_information_cols=[\"open\", \"close\", \"high\", \"low\", \"volume\"],\n",
    "        out_of_cash_penalty=None,\n",
    "        cache_indicator_data = True\n",
    "    ):\n",
    "        self.df = df\n",
    "        self.stock_col = \"tic\"\n",
    "        self.assets = df[self.stock_col].unique()\n",
    "        self.dates = df[date_col_name].sort_values().unique()\n",
    "        self.df = self.df.set_index(date_col_name)\n",
    "        self.hmax = hmax\n",
    "        self.initial_amount = initial_amount\n",
    "        if out_of_cash_penalty is None:\n",
    "            out_of_cash_penalty=-initial_amount*0.5\n",
    "        self.out_of_cash_penalty = out_of_cash_penalty\n",
    "        self.print_verbosity = print_verbosity\n",
    "        self.transaction_cost_pct = transaction_cost_pct\n",
    "        self.reward_scaling = reward_scaling\n",
    "        self.daily_information_cols = daily_information_cols\n",
    "        self.close_index = self.daily_information_cols.index(\"close\")\n",
    "        self.state_space = (\n",
    "            1 + len(self.assets) + len(self.assets) * len(self.daily_information_cols)\n",
    "        )\n",
    "        self.action_space = spaces.Box(low=-1, high=1, shape=(len(self.assets),))\n",
    "        self.observation_space = spaces.Box(\n",
    "            low=-np.inf, high=np.inf, shape=(self.state_space,)\n",
    "        )\n",
    "        self.episode = -1  # initialize so we can call reset\n",
    "        self.seed()\n",
    "        self.episode_history = []\n",
    "        self.printed_header = False\n",
    "        self.cache_indicator_data = cache_indicator_data\n",
    "        self.cached_data = None\n",
    "        if self.cache_indicator_data:\n",
    "            print(\"caching data\")\n",
    "            self.cached_data = [self.get_date_vector(i) for i, _ in enumerate(self.dates)]\n",
    "            print(\"data cached!\")\n",
    "        \n",
    "\n",
    "    def seed(self):\n",
    "        pass\n",
    "\n",
    "\n",
    "    def reset(self):\n",
    "        self.sum_trades = 0\n",
    "        self.date_index = 0\n",
    "        self.episode += 1\n",
    "        self.actions_memory = []\n",
    "        self.state_memory = []\n",
    "        self.account_information = {\n",
    "            \"cash\": [],\n",
    "            \"asset_value\": [],\n",
    "            \"total_assets\": [],\n",
    "            'reward': []\n",
    "        }\n",
    "        self.state_memory.append(\n",
    "            np.array(\n",
    "                [self.initial_amount]\n",
    "                + [0] * len(self.assets)\n",
    "                + self.get_date_vector(self.date_index)\n",
    "            )\n",
    "        )\n",
    "        return [0 for _ in range(self.state_space)]\n",
    "\n",
    "    def get_date_vector(self, date, cols=None):\n",
    "        if (cols is None) and (self.cached_data is not None):\n",
    "            return self.cached_data[date]\n",
    "        else:\n",
    "            date = self.dates[date]\n",
    "            if cols is None:\n",
    "                cols = self.daily_information_cols\n",
    "            trunc_df = self.df.loc[date]\n",
    "            v = []\n",
    "            for a in self.assets:\n",
    "                subset = trunc_df[trunc_df[self.stock_col] == a]\n",
    "                v += subset.loc[date, cols].tolist()\n",
    "            assert len(v) == len(self.assets) * len(cols)\n",
    "            return v\n",
    "    \n",
    "    def log_step(self, reason, terminal_reward=None):\n",
    "        if terminal_reward is None:\n",
    "            terminal_reward = self.account_information['reward'][-1]\n",
    "        cash_pct = self.account_information['cash'][-1]/self.account_information['total_assets'][-1]\n",
    "        rec = [self.episode, self.date_index, reason, f\"${int(self.account_information['total_assets'][-1])}\",f\"${terminal_reward:0.2f}\", f\"{cash_pct*100:0.2f}%\"]\n",
    "\n",
    "        self.episode_history.append(rec)\n",
    "        print(self.template.format(*rec))\n",
    "\n",
    "    def step(self, actions):\n",
    "        #print header only first time\n",
    "        if self.printed_header is False:\n",
    "            self.template = \"{0:8}|{1:10}|{2:15}|{3:7}|{4:10}|{5:10}\" # column widths: 8, 10, 15, 7, 10\n",
    "            print(self.template.format(\"EPISODE\", \"STEPS\", \"TERMINAL_REASON\", \"TOT_ASSETS\", \"TERMINAL_REWARD_unsc\", \"CASH_PCT\"))\n",
    "            self.printed_header = True\n",
    "\n",
    "        # define terminal function in scope so we can do something about the cycle being over\n",
    "        def return_terminal(reason='Last Date', extra_reward=0):\n",
    "\n",
    "            state = self.state_memory[-1]\n",
    "            reward = 0\n",
    "            reward += extra_reward\n",
    "            self.log_step(reason = reason, terminal_reward= reward)\n",
    "            reward = reward*self.reward_scaling\n",
    "            # Add outputs to logger interface\n",
    "            reward_pct = self.account_information['total_assets'][-1]/self.initial_amount\n",
    "            '''logger.record(\"environment/total_reward_pct\", (reward_pct-1)*100)\n",
    "            logger.record(\"environment/daily_trades\", self.sum_trades/self.date_index)\n",
    "            logger.record(\"environment/completed_steps\", self.date_index)\n",
    "            logger.record(\"environment/sum_rewards\", np.sum(self.account_information['reward']))'''\n",
    "            return state, reward, True, {}\n",
    "\n",
    "        # print if it's time.\n",
    "        if (self.date_index + 1) % self.print_verbosity == 0:\n",
    "            self.log_step(reason = 'update')\n",
    "\n",
    "        #if we're at the end\n",
    "        if self.date_index == len(self.dates) - 1:\n",
    "            #if we hit the end, set reward to total gains (or losses)\n",
    "            terminal_reward = self.account_information['total_assets'][-1]-self.initial_amount\n",
    "            return return_terminal(extra_reward = terminal_reward)\n",
    "        else:\n",
    "            begin_cash = self.state_memory[-1][0]\n",
    "            holdings = self.state_memory[-1][1 : len(self.assets) + 1]\n",
    "            assert (min(holdings)>=0)\n",
    "            closings = np.array(self.get_date_vector(self.date_index, cols=[\"close\"]))\n",
    "\n",
    "            # compute current value of holdings\n",
    "            asset_value = np.dot(holdings, closings)\n",
    "\n",
    "            # reward is (cash + assets) - (cash_last_step + assets_last_step)\n",
    "            if self.date_index==0:\n",
    "                reward = 0\n",
    "            else:\n",
    "                reward = (\n",
    "                    begin_cash + asset_value - self.account_information[\"total_assets\"][-1]\n",
    "                )\n",
    "\n",
    "            # log the values of cash, assets, and total assets\n",
    "            self.account_information[\"cash\"].append(begin_cash)\n",
    "            self.account_information[\"asset_value\"].append(asset_value)\n",
    "            self.account_information[\"total_assets\"].append(begin_cash + asset_value)\n",
    "            self.account_information['reward'].append(reward)\n",
    "\n",
    "            # multiply action values by our scalar multiplier and save\n",
    "            actions = actions * self.hmax\n",
    "            self.actions_memory.append(actions)\n",
    "\n",
    "            # clip actions so we can't sell more assets than we hold\n",
    "            actions = np.maximum(actions, -np.array(holdings))\n",
    "            self.sum_trades += np.sum(np.abs(actions))\n",
    "\n",
    "            # compute our proceeds from sales, and add to cash\n",
    "            sells = -np.clip(actions, -np.inf, 0)\n",
    "            proceeds = np.dot(sells, closings)\n",
    "            costs = proceeds * self.transaction_cost_pct\n",
    "            coh = begin_cash + proceeds\n",
    "\n",
    "            # compute the cost of our buys\n",
    "            buys = np.clip(actions, 0, np.inf)\n",
    "            spend = np.dot(buys, closings)\n",
    "            costs += spend * self.transaction_cost_pct\n",
    "\n",
    "            # if we run out of cash, end the cycle and penalize\n",
    "            if (spend + costs) > coh:\n",
    "                return return_terminal(reason = 'CASH SHORTAGE',\n",
    "                    extra_reward=self.out_of_cash_penalty,\n",
    "                )\n",
    "\n",
    "            # verify we didn't do anything impossible here\n",
    "            assert (spend + costs) <= coh\n",
    "\n",
    "            # update our holdings\n",
    "            coh = coh - spend - costs\n",
    "            holdings_updated = holdings + actions\n",
    "            self.date_index += 1\n",
    "            state = (\n",
    "                [coh] + list(holdings_updated) + self.get_date_vector(self.date_index)\n",
    "            )\n",
    "            self.state_memory.append(state)\n",
    "            reward = reward * self.reward_scaling\n",
    "            return state, reward, False, {}\n",
    "\n",
    "    def get_sb_env(self):\n",
    "        e = DummyVecEnv([lambda: self])\n",
    "        obs = e.reset()\n",
    "        return e, obs\n",
    "    \n",
    "    def get_multiproc_env(self, n = 10):\n",
    "        def get_self():\n",
    "            return deepcopy(self)\n",
    "        e = SubprocVecEnv([get_self for _ in range(n)], start_method = 'fork')\n",
    "        obs = e.reset()\n",
    "        return e, obs\n",
    "\n",
    "    def save_asset_memory(self):\n",
    "        self.account_information[\"date\"] = self.dates[: len(self.account_information['cash'])]\n",
    "        return pd.DataFrame(self.account_information)\n",
    "\n",
    "    def save_action_memory(self):\n",
    "        return pd.DataFrame(\n",
    "            {\"date\": self.dates[: self.date_index], \"actions\": self.actions_memory}\n",
    "        )\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "dzCOhnBM7W8E",
    "outputId": "fefdf653-10f8-4046-93c7-a64d951c74df"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "    A stock trading environment for OpenAI gym\n",
      "    Parameters:\n",
      "    state space: {start_cash, <owned_shares>, for s in stocks{<stock.values>}, }\n",
      "        df (pandas.DataFrame): Dataframe containing data\n",
      "        transaction_cost (float): cost for buying or selling shares\n",
      "        hmax (int): max number of share purchases allowed per asset\n",
      "        turbulence_threshold (float): Maximum turbulence allowed in market for purchases to occur. If exceeded, positions are liquidated\n",
      "        print_verbosity(int): When iterating (step), how often to print stats about state of env\n",
      "        reward_scaling (float): Scaling value to multiply reward by at each step. \n",
      "        initial_amount: (int, float): Amount of cash initially available\n",
      "        daily_information_columns (list(str)): Columns to use when building state space from the dataframe. \n",
      "        out_of_cash_penalty (int, float): Penalty to apply if the algorithm runs out of cash\n",
      "    \n",
      "\n",
      "\n",
      "    tests:\n",
      "        after reset, static strategy should result in same metrics\n",
      "\n",
      "        buy zero should result in no costs, no assets purchased\n",
      "        given no change in prices, no change in asset values\n",
      "    \n"
     ]
    }
   ],
   "source": [
    "print(StockTradingEnvV2.__doc__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Q2zqII8rMIqn",
    "outputId": "8a2c943b-1be4-4b8d-b64f-666e0852b7e6"
   },
   "source": [
    "#### state space\n",
    "The state space of the observation is as follows \n",
    "\n",
    "`start_cash, <owned_shares_of_n_assets>, <<indicator_i_for_asset_j> for j in assets>`\n",
    "\n",
    "indicators are any daily measurement you can achieve. Common ones are 'volume', 'open' 'close' 'high', 'low'.\n",
    "However, you can add these as needed, \n",
    "The feature engineer adds indicators, and you can add your own as well. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "AWyp84Ltto19",
    "outputId": "d3062963-ac6a-45e5-e08f-d8bf848b160b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "caching data\n",
      "data cached!\n"
     ]
    }
   ],
   "source": [
    "information_cols = ['open', 'high', 'low', 'close', 'volume', 'day', 'macd', 'rsi_30', 'cci_30', 'dx_30', 'turbulence']\n",
    "\n",
    "e_train_gym = StockTradingEnvV2(df = train, \n",
    "                              hmax = 100, \n",
    "                              out_of_cash_penalty=-1e6,\n",
    "                              daily_information_cols = information_cols,\n",
    "                              print_verbosity = 500)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "64EoqOrQjiVf"
   },
   "source": [
    "## Environment for Training\n",
    "There are two available environments. The multiprocessing and the single processing env. \n",
    "Some models won't work with multiprocessing. \n",
    "\n",
    "```python\n",
    "# single processing\n",
    "env_train, _ = e_train_gym.get_sb_env()\n",
    "\n",
    "\n",
    "#multiprocessing\n",
    "env_train, _ = e_train_gym.get_multiproc_env(n = <n_cores>)\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "xwSvvPjutpqS",
    "outputId": "42a86c00-9f5d-4962-c1fe-7d52dbf5eba6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "using 12 cores\n"
     ]
    }
   ],
   "source": [
    "# for this example, let's do multiprocessing with n_cores-2\n",
    "\n",
    "import multiprocessing\n",
    "\n",
    "n_cores = multiprocessing.cpu_count() - 2\n",
    "n_cores = 12\n",
    "print(f\"using {n_cores} cores\")\n",
    "\n",
    "\n",
    "# env_train, _ = e_train_gym.get_multiproc_env(n = n_cores)\n",
    "env_train, _ = e_train_gym.get_sb_env()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "HMNR5nHjh1iz"
   },
   "source": [
    "<a id='5'></a>\n",
    "# Part 6: Implement DRL Algorithms\n",
    "* The implementation of the DRL algorithms are based on **OpenAI Baselines** and **Stable Baselines**. Stable Baselines is a fork of OpenAI Baselines, with a major structural refactoring, and code cleanups.\n",
    "* FinRL library includes fine-tuned standard DRL algorithms, such as DQN, DDPG,\n",
    "Multi-Agent DDPG, PPO, SAC, A2C and TD3. We also allow users to\n",
    "design their own DRL algorithms by adapting these DRL algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "id": "364PsqckttcQ"
   },
   "outputs": [],
   "source": [
    "agent = DRLAgent(env = env_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "nuYiLFma7W8H",
    "outputId": "013db8cc-9f0e-41a0-f51f-f08d99e4c4db"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'n_steps': 2048, 'ent_coef': 0.01, 'learning_rate': 0.00025, 'batch_size': 64}\n"
     ]
    }
   ],
   "source": [
    "print(config.PPO_PARAMS)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "YDmqOyF9h1iz"
   },
   "source": [
    "### Model Training: 5 models, A2C DDPG, PPO, TD3, SAC\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uijiWgkuh1jB"
   },
   "source": [
    "### Model 1: A2C\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "id": "GUCnkn-HIbmj"
   },
   "outputs": [],
   "source": [
    "# from torch.nn import Softsign\n",
    "# a2c_params = {\n",
    "#     \"ent_coef\": 0.01, \n",
    "#     \"learning_rate\": 9e-4,\n",
    "#     \"n_steps\": 10, \n",
    "#     \"gamma\": 0.98\n",
    "# }\n",
    "\n",
    "# policy_kwargs = {\n",
    "#     \"activation_fn\": Softsign\n",
    "# }\n",
    "\n",
    "# model = agent.get_model(\"a2c\",  model_kwargs = a2c_params, policy_kwargs = policy_kwargs)\n",
    "\n",
    "# model.load(\"quicksave_a2c_dow.model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "U2UlXxVk7W8I",
    "outputId": "5c9108f3-6bd6-4479-859e-131837eb61af"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'n_steps': 128, 'ent_coef': 0.01, 'learning_rate': 0.00025, 'batch_size': 256, 'gamma': 0.99}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/dist-packages/stable_baselines3/ppo/ppo.py:138: UserWarning: You have specified a mini-batch size of 256, but because the `RolloutBuffer` is of size `n_steps * n_envs = 128`, after every 0 untruncated mini-batches, there will be a truncated mini-batch of size 128\n",
      "We recommend using a `batch_size` that is a factor of `n_steps * n_envs`.\n",
      "Info: (n_steps=128 and n_envs=1)\n",
      "  f\"You have specified a mini-batch size of {batch_size},\"\n"
     ]
    }
   ],
   "source": [
    "from torch.nn import Softsign, ReLU\n",
    "ppo_params ={'n_steps': 128, \n",
    "             'ent_coef': 0.01, \n",
    "             'learning_rate': 0.00025, \n",
    "             'batch_size': 256, \n",
    "            'gamma': 0.99}\n",
    "\n",
    "policy_kwargs = {\n",
    "#     \"activation_fn\": ReLU,\n",
    "    \"net_arch\": [1024, 1024, 1024], \n",
    "#     \"squash_output\": True\n",
    "}\n",
    "\n",
    "model = agent.get_model(\"ppo\",  model_kwargs = ppo_params, policy_kwargs = policy_kwargs, verbose = 0)\n",
    "# model.load(\"quicksave_ppo_dow.model\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "r-iVv5N-7W8I",
    "outputId": "0dbcaf9c-f32e-4f1c-98e0-fe168c5bf179"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPISODE |STEPS     |TERMINAL_REASON|TOT_ASSETS|TERMINAL_REWARD_unsc|CASH_PCT  \n",
      "       1|       220|CASH SHORTAGE  |$1196108|$-1000000.00|1.22%     \n",
      "       2|       119|CASH SHORTAGE  |$1032187|$-1000000.00|2.22%     \n",
      "       3|       134|CASH SHORTAGE  |$1068895|$-1000000.00|2.57%     \n",
      "       4|       129|CASH SHORTAGE  |$1089840|$-1000000.00|1.04%     \n",
      "       5|       106|CASH SHORTAGE  |$1138904|$-1000000.00|1.30%     \n",
      "       6|       101|CASH SHORTAGE  |$1077162|$-1000000.00|1.45%     \n",
      "       7|       119|CASH SHORTAGE  |$1055298|$-1000000.00|0.97%     \n",
      "       8|       132|CASH SHORTAGE  |$1064627|$-1000000.00|0.57%     \n",
      "       9|       108|CASH SHORTAGE  |$1118754|$-1000000.00|1.80%     \n",
      "      10|       111|CASH SHORTAGE  |$1118863|$-1000000.00|2.49%     \n",
      "      11|       101|CASH SHORTAGE  |$1143505|$-1000000.00|1.49%     \n",
      "      12|        93|CASH SHORTAGE  |$1139654|$-1000000.00|1.66%     \n",
      "      13|        88|CASH SHORTAGE  |$1161013|$-1000000.00|0.00%     \n",
      "      14|        82|CASH SHORTAGE  |$1136162|$-1000000.00|1.24%     \n",
      "      15|        87|CASH SHORTAGE  |$1217342|$-1000000.00|1.80%     \n",
      "      16|        86|CASH SHORTAGE  |$1155563|$-1000000.00|0.17%     \n",
      "      17|        84|CASH SHORTAGE  |$1172399|$-1000000.00|1.23%     \n",
      "      18|        82|CASH SHORTAGE  |$1183070|$-1000000.00|1.02%     \n",
      "      19|        87|CASH SHORTAGE  |$1189943|$-1000000.00|0.95%     \n",
      "      20|        79|CASH SHORTAGE  |$1150540|$-1000000.00|2.12%     \n",
      "      21|        93|CASH SHORTAGE  |$1214547|$-1000000.00|0.48%     \n",
      "      22|       103|CASH SHORTAGE  |$1216600|$-1000000.00|1.66%     \n",
      "      23|       106|CASH SHORTAGE  |$1190075|$-1000000.00|0.72%     \n",
      "      24|       109|CASH SHORTAGE  |$1178859|$-1000000.00|1.53%     \n",
      "      25|       100|CASH SHORTAGE  |$1126353|$-1000000.00|0.03%     \n",
      "      26|        83|CASH SHORTAGE  |$1148201|$-1000000.00|0.72%     \n",
      "      27|        86|CASH SHORTAGE  |$1143924|$-1000000.00|1.45%     \n",
      "      28|       104|CASH SHORTAGE  |$1154903|$-1000000.00|2.09%     \n",
      "      29|        94|CASH SHORTAGE  |$1160425|$-1000000.00|2.64%     \n",
      "      30|        93|CASH SHORTAGE  |$1189499|$-1000000.00|1.06%     \n",
      "      31|        95|CASH SHORTAGE  |$1177445|$-1000000.00|1.67%     \n",
      "      32|        85|CASH SHORTAGE  |$1208837|$-1000000.00|1.68%     \n",
      "      33|        90|CASH SHORTAGE  |$1139796|$-1000000.00|0.31%     \n",
      "      34|       134|CASH SHORTAGE  |$1175594|$-1000000.00|0.00%     \n",
      "      35|       126|CASH SHORTAGE  |$1081984|$-1000000.00|0.29%     \n",
      "      36|       102|CASH SHORTAGE  |$1175197|$-1000000.00|1.16%     \n",
      "      37|        87|CASH SHORTAGE  |$1224150|$-1000000.00|1.28%     \n",
      "      38|        74|CASH SHORTAGE  |$1113877|$-1000000.00|1.30%     \n",
      "      39|        78|CASH SHORTAGE  |$1114507|$-1000000.00|2.01%     \n",
      "      40|        83|CASH SHORTAGE  |$1182827|$-1000000.00|1.22%     \n",
      "      41|        78|CASH SHORTAGE  |$1136583|$-1000000.00|1.44%     \n",
      "      42|        69|CASH SHORTAGE  |$1083315|$-1000000.00|0.26%     \n",
      "      43|        75|CASH SHORTAGE  |$1095429|$-1000000.00|0.15%     \n",
      "      44|        74|CASH SHORTAGE  |$1108913|$-1000000.00|0.81%     \n",
      "      45|        70|CASH SHORTAGE  |$1078890|$-1000000.00|0.95%     \n",
      "      46|        62|CASH SHORTAGE  |$1089423|$-1000000.00|0.87%     \n",
      "      47|        63|CASH SHORTAGE  |$1110901|$-1000000.00|0.33%     \n",
      "      48|        77|CASH SHORTAGE  |$1133935|$-1000000.00|0.60%     \n",
      "      49|        62|CASH SHORTAGE  |$1086882|$-1000000.00|0.26%     \n",
      "      50|        60|CASH SHORTAGE  |$1032207|$-1000000.00|0.95%     \n",
      "      51|        75|CASH SHORTAGE  |$1094453|$-1000000.00|0.04%     \n",
      "      52|        69|CASH SHORTAGE  |$1071090|$-1000000.00|0.27%     \n",
      "      53|        62|CASH SHORTAGE  |$1064110|$-1000000.00|0.63%     \n",
      "      54|        57|CASH SHORTAGE  |$1069688|$-1000000.00|0.57%     \n",
      "      55|        63|CASH SHORTAGE  |$1062141|$-1000000.00|2.31%     \n",
      "      56|        58|CASH SHORTAGE  |$1054693|$-1000000.00|1.10%     \n",
      "      57|        54|CASH SHORTAGE  |$1058893|$-1000000.00|1.51%     \n",
      "      58|        53|CASH SHORTAGE  |$973021|$-1000000.00|0.87%     \n",
      "      59|        53|CASH SHORTAGE  |$986891|$-1000000.00|0.20%     \n",
      "      60|        50|CASH SHORTAGE  |$1001500|$-1000000.00|0.36%     \n",
      "      61|        47|CASH SHORTAGE  |$979225|$-1000000.00|1.45%     \n",
      "      62|        44|CASH SHORTAGE  |$853813|$-1000000.00|1.56%     \n",
      "      63|        51|CASH SHORTAGE  |$1036010|$-1000000.00|1.71%     \n",
      "      64|        58|CASH SHORTAGE  |$1061410|$-1000000.00|0.41%     \n",
      "      65|        54|CASH SHORTAGE  |$1073200|$-1000000.00|3.02%     \n",
      "      66|        55|CASH SHORTAGE  |$1048693|$-1000000.00|0.53%     \n",
      "      67|        55|CASH SHORTAGE  |$1039686|$-1000000.00|1.02%     \n",
      "      68|        51|CASH SHORTAGE  |$1020695|$-1000000.00|1.25%     \n",
      "      69|        49|CASH SHORTAGE  |$974106|$-1000000.00|0.56%     \n",
      "      70|        39|CASH SHORTAGE  |$905791|$-1000000.00|2.08%     \n",
      "      71|        40|CASH SHORTAGE  |$899959|$-1000000.00|0.57%     \n",
      "      72|        38|CASH SHORTAGE  |$939767|$-1000000.00|1.66%     \n",
      "      73|        48|CASH SHORTAGE  |$982310|$-1000000.00|0.31%     \n",
      "      74|        44|CASH SHORTAGE  |$863110|$-1000000.00|0.00%     \n",
      "      75|        42|CASH SHORTAGE  |$883250|$-1000000.00|1.61%     \n",
      "      76|        40|CASH SHORTAGE  |$898748|$-1000000.00|1.43%     \n",
      "      77|        36|CASH SHORTAGE  |$938539|$-1000000.00|2.62%     \n",
      "      78|        38|CASH SHORTAGE  |$940367|$-1000000.00|0.80%     \n",
      "      79|        37|CASH SHORTAGE  |$956671|$-1000000.00|2.83%     \n",
      "      80|        40|CASH SHORTAGE  |$897576|$-1000000.00|1.84%     \n",
      "      81|        37|CASH SHORTAGE  |$951016|$-1000000.00|1.45%     \n",
      "      82|        38|CASH SHORTAGE  |$942733|$-1000000.00|0.31%     \n",
      "      83|        33|CASH SHORTAGE  |$935861|$-1000000.00|0.21%     \n",
      "      84|        34|CASH SHORTAGE  |$900153|$-1000000.00|2.73%     \n",
      "      85|        34|CASH SHORTAGE  |$899843|$-1000000.00|0.59%     \n",
      "      86|        34|CASH SHORTAGE  |$905079|$-1000000.00|3.39%     \n",
      "      87|        33|CASH SHORTAGE  |$941380|$-1000000.00|3.30%     \n",
      "      88|        36|CASH SHORTAGE  |$938176|$-1000000.00|2.29%     \n",
      "      89|        36|CASH SHORTAGE  |$945215|$-1000000.00|0.67%     \n",
      "      90|        35|CASH SHORTAGE  |$956146|$-1000000.00|2.62%     \n",
      "      91|        34|CASH SHORTAGE  |$902644|$-1000000.00|0.93%     \n",
      "      92|        35|CASH SHORTAGE  |$956664|$-1000000.00|0.37%     \n",
      "      93|        33|CASH SHORTAGE  |$935957|$-1000000.00|1.03%     \n",
      "      94|        32|CASH SHORTAGE  |$947409|$-1000000.00|2.96%     \n",
      "      95|        35|CASH SHORTAGE  |$952462|$-1000000.00|2.00%     \n",
      "      96|        33|CASH SHORTAGE  |$933221|$-1000000.00|0.36%     \n",
      "      97|        30|CASH SHORTAGE  |$944438|$-1000000.00|3.16%     \n",
      "      98|        30|CASH SHORTAGE  |$942125|$-1000000.00|1.86%     \n",
      "      99|        29|CASH SHORTAGE  |$998259|$-1000000.00|0.30%     \n",
      "     100|        29|CASH SHORTAGE  |$995071|$-1000000.00|2.41%     \n",
      "     101|        29|CASH SHORTAGE  |$997315|$-1000000.00|0.79%     \n",
      "     102|        28|CASH SHORTAGE  |$1000815|$-1000000.00|1.04%     \n",
      "     103|        28|CASH SHORTAGE  |$1000460|$-1000000.00|4.07%     \n",
      "     104|        29|CASH SHORTAGE  |$995016|$-1000000.00|0.51%     \n",
      "     105|        30|CASH SHORTAGE  |$947544|$-1000000.00|1.27%     \n",
      "     106|        32|CASH SHORTAGE  |$937684|$-1000000.00|2.67%     \n",
      "     107|        32|CASH SHORTAGE  |$944590|$-1000000.00|0.64%     \n",
      "     108|        32|CASH SHORTAGE  |$940095|$-1000000.00|1.08%     \n",
      "     109|        35|CASH SHORTAGE  |$932601|$-1000000.00|0.93%     \n",
      "     110|        34|CASH SHORTAGE  |$900542|$-1000000.00|0.41%     \n",
      "     111|        31|CASH SHORTAGE  |$952091|$-1000000.00|0.19%     \n",
      "     112|        31|CASH SHORTAGE  |$952241|$-1000000.00|2.35%     \n",
      "     113|        33|CASH SHORTAGE  |$927677|$-1000000.00|1.21%     \n",
      "     114|        36|CASH SHORTAGE  |$919390|$-1000000.00|1.28%     \n",
      "     115|        36|CASH SHORTAGE  |$924219|$-1000000.00|1.14%     \n",
      "     116|        33|CASH SHORTAGE  |$923790|$-1000000.00|1.96%     \n",
      "     117|        37|CASH SHORTAGE  |$919608|$-1000000.00|0.28%     \n",
      "     118|        42|CASH SHORTAGE  |$867071|$-1000000.00|0.30%     \n",
      "     119|        42|CASH SHORTAGE  |$873790|$-1000000.00|0.50%     \n",
      "     120|        37|CASH SHORTAGE  |$915720|$-1000000.00|2.80%     \n",
      "     121|        41|CASH SHORTAGE  |$903704|$-1000000.00|2.56%     \n",
      "     122|        42|CASH SHORTAGE  |$862695|$-1000000.00|1.29%     \n",
      "     123|        42|CASH SHORTAGE  |$861989|$-1000000.00|0.32%     \n",
      "     124|        43|CASH SHORTAGE  |$860531|$-1000000.00|2.55%     \n",
      "     125|        42|CASH SHORTAGE  |$863253|$-1000000.00|1.27%     \n",
      "     126|        45|CASH SHORTAGE  |$904478|$-1000000.00|1.55%     \n",
      "     127|        48|CASH SHORTAGE  |$949824|$-1000000.00|0.92%     \n",
      "     128|        48|CASH SHORTAGE  |$946532|$-1000000.00|0.18%     \n",
      "     129|        48|CASH SHORTAGE  |$947801|$-1000000.00|0.45%     \n",
      "     130|        47|CASH SHORTAGE  |$936013|$-1000000.00|0.51%     \n",
      "     131|        47|CASH SHORTAGE  |$940559|$-1000000.00|1.10%     \n",
      "     132|        49|CASH SHORTAGE  |$944607|$-1000000.00|2.30%     \n",
      "     133|        48|CASH SHORTAGE  |$942394|$-1000000.00|0.80%     \n",
      "     134|        49|CASH SHORTAGE  |$953004|$-1000000.00|0.38%     \n",
      "     135|        51|CASH SHORTAGE  |$983871|$-1000000.00|1.02%     \n",
      "     136|        52|CASH SHORTAGE  |$975428|$-1000000.00|0.04%     \n",
      "     137|        52|CASH SHORTAGE  |$972645|$-1000000.00|1.04%     \n",
      "     138|        49|CASH SHORTAGE  |$947532|$-1000000.00|0.96%     \n",
      "     139|        48|CASH SHORTAGE  |$945437|$-1000000.00|1.30%     \n",
      "     140|        51|CASH SHORTAGE  |$984690|$-1000000.00|1.42%     \n",
      "     141|        47|CASH SHORTAGE  |$943586|$-1000000.00|1.22%     \n",
      "     142|        45|CASH SHORTAGE  |$900071|$-1000000.00|0.03%     \n",
      "     143|        48|CASH SHORTAGE  |$943667|$-1000000.00|0.35%     \n",
      "     144|        49|CASH SHORTAGE  |$950782|$-1000000.00|0.38%     \n",
      "     145|        52|CASH SHORTAGE  |$977782|$-1000000.00|0.23%     \n",
      "     146|        52|CASH SHORTAGE  |$975340|$-1000000.00|0.53%     \n",
      "     147|        48|CASH SHORTAGE  |$939610|$-1000000.00|0.69%     \n",
      "     148|        46|CASH SHORTAGE  |$910512|$-1000000.00|2.18%     \n",
      "     149|        51|CASH SHORTAGE  |$979360|$-1000000.00|1.27%     \n",
      "     150|        49|CASH SHORTAGE  |$942573|$-1000000.00|1.28%     \n",
      "     151|        49|CASH SHORTAGE  |$942703|$-1000000.00|1.24%     \n",
      "     152|        49|CASH SHORTAGE  |$940059|$-1000000.00|1.07%     \n",
      "     153|        50|CASH SHORTAGE  |$972812|$-1000000.00|0.17%     \n",
      "     154|        46|CASH SHORTAGE  |$911581|$-1000000.00|1.74%     \n",
      "     155|        47|CASH SHORTAGE  |$948466|$-1000000.00|1.71%     \n",
      "     156|        48|CASH SHORTAGE  |$943270|$-1000000.00|0.05%     \n",
      "     157|        46|CASH SHORTAGE  |$915269|$-1000000.00|2.70%     \n",
      "     158|        46|CASH SHORTAGE  |$909239|$-1000000.00|1.32%     \n",
      "     159|        49|CASH SHORTAGE  |$943820|$-1000000.00|1.16%     \n",
      "     160|        50|CASH SHORTAGE  |$973232|$-1000000.00|1.03%     \n",
      "     161|        47|CASH SHORTAGE  |$940916|$-1000000.00|1.16%     \n",
      "     162|        51|CASH SHORTAGE  |$983995|$-1000000.00|1.11%     \n",
      "     163|        52|CASH SHORTAGE  |$968715|$-1000000.00|0.20%     \n",
      "     164|        51|CASH SHORTAGE  |$985216|$-1000000.00|0.67%     \n",
      "     165|        53|CASH SHORTAGE  |$953671|$-1000000.00|0.57%     \n",
      "     166|        50|CASH SHORTAGE  |$971589|$-1000000.00|0.75%     \n",
      "     167|        50|CASH SHORTAGE  |$967649|$-1000000.00|0.63%     \n",
      "     168|        48|CASH SHORTAGE  |$937670|$-1000000.00|1.73%     \n",
      "     169|        49|CASH SHORTAGE  |$939892|$-1000000.00|0.85%     \n",
      "     170|        45|CASH SHORTAGE  |$900509|$-1000000.00|1.11%     \n",
      "     171|        45|CASH SHORTAGE  |$900260|$-1000000.00|1.28%     \n",
      "     172|        46|CASH SHORTAGE  |$902550|$-1000000.00|1.02%     \n",
      "     173|        44|CASH SHORTAGE  |$840949|$-1000000.00|0.98%     \n",
      "     174|        46|CASH SHORTAGE  |$903015|$-1000000.00|1.58%     \n",
      "     175|        42|CASH SHORTAGE  |$849771|$-1000000.00|0.91%     \n",
      "     176|        47|CASH SHORTAGE  |$937210|$-1000000.00|0.24%     \n",
      "     177|        46|CASH SHORTAGE  |$904696|$-1000000.00|0.45%     \n",
      "     178|        41|CASH SHORTAGE  |$888188|$-1000000.00|1.26%     \n",
      "     179|        44|CASH SHORTAGE  |$848278|$-1000000.00|1.38%     \n",
      "     180|        41|CASH SHORTAGE  |$884335|$-1000000.00|0.85%     \n",
      "     181|        39|CASH SHORTAGE  |$871763|$-1000000.00|0.85%     \n",
      "     182|        41|CASH SHORTAGE  |$886923|$-1000000.00|1.50%     \n",
      "     183|        40|CASH SHORTAGE  |$863117|$-1000000.00|0.92%     \n",
      "     184|        39|CASH SHORTAGE  |$867801|$-1000000.00|2.38%     \n",
      "     185|        41|CASH SHORTAGE  |$885334|$-1000000.00|1.26%     \n",
      "     186|        39|CASH SHORTAGE  |$870647|$-1000000.00|3.22%     \n",
      "     187|        36|CASH SHORTAGE  |$896189|$-1000000.00|1.16%     \n",
      "     188|        39|CASH SHORTAGE  |$858795|$-1000000.00|0.34%     \n",
      "     189|        39|CASH SHORTAGE  |$866808|$-1000000.00|2.95%     \n",
      "     190|        40|CASH SHORTAGE  |$859124|$-1000000.00|0.14%     \n",
      "     191|        41|CASH SHORTAGE  |$885053|$-1000000.00|0.95%     \n",
      "     192|        39|CASH SHORTAGE  |$866600|$-1000000.00|0.56%     \n",
      "     193|        39|CASH SHORTAGE  |$867130|$-1000000.00|1.88%     \n",
      "     194|        42|CASH SHORTAGE  |$852009|$-1000000.00|1.44%     \n",
      "     195|        40|CASH SHORTAGE  |$862798|$-1000000.00|0.18%     \n",
      "     196|        38|CASH SHORTAGE  |$899610|$-1000000.00|0.33%     \n",
      "     197|        37|CASH SHORTAGE  |$896872|$-1000000.00|1.69%     \n",
      "     198|        38|CASH SHORTAGE  |$906249|$-1000000.00|2.26%     \n",
      "     199|        38|CASH SHORTAGE  |$904662|$-1000000.00|0.28%     \n",
      "     200|        37|CASH SHORTAGE  |$897444|$-1000000.00|0.63%     \n",
      "     201|        38|CASH SHORTAGE  |$898643|$-1000000.00|1.19%     \n",
      "     202|        39|CASH SHORTAGE  |$867906|$-1000000.00|1.83%     \n",
      "     203|        43|CASH SHORTAGE  |$855408|$-1000000.00|1.41%     \n",
      "     204|        41|CASH SHORTAGE  |$886646|$-1000000.00|1.25%     \n",
      "     205|        40|CASH SHORTAGE  |$865332|$-1000000.00|1.13%     \n",
      "     206|        40|CASH SHORTAGE  |$871351|$-1000000.00|1.26%     \n",
      "     207|        40|CASH SHORTAGE  |$871960|$-1000000.00|0.94%     \n",
      "     208|        40|CASH SHORTAGE  |$871960|$-1000000.00|2.11%     \n",
      "     209|        39|CASH SHORTAGE  |$872758|$-1000000.00|2.57%     \n",
      "     210|        40|CASH SHORTAGE  |$867863|$-1000000.00|1.90%     \n",
      "     211|        41|CASH SHORTAGE  |$887474|$-1000000.00|1.11%     \n",
      "     212|        40|CASH SHORTAGE  |$868326|$-1000000.00|0.23%     \n",
      "     213|        38|CASH SHORTAGE  |$907198|$-1000000.00|2.68%     \n",
      "     214|        39|CASH SHORTAGE  |$873699|$-1000000.00|1.60%     \n",
      "     215|        41|CASH SHORTAGE  |$889619|$-1000000.00|0.14%     \n",
      "     216|        38|CASH SHORTAGE  |$905575|$-1000000.00|2.53%     \n",
      "     217|        40|CASH SHORTAGE  |$875490|$-1000000.00|1.87%     \n",
      "     218|        40|CASH SHORTAGE  |$873626|$-1000000.00|0.46%     \n",
      "     219|        38|CASH SHORTAGE  |$908263|$-1000000.00|2.82%     \n",
      "     220|        39|CASH SHORTAGE  |$873464|$-1000000.00|2.16%     \n",
      "     221|        38|CASH SHORTAGE  |$907765|$-1000000.00|2.52%     \n",
      "     222|        39|CASH SHORTAGE  |$869053|$-1000000.00|0.97%     \n",
      "     223|        38|CASH SHORTAGE  |$903560|$-1000000.00|0.93%     \n",
      "     224|        39|CASH SHORTAGE  |$870288|$-1000000.00|0.17%     \n",
      "     225|        40|CASH SHORTAGE  |$871560|$-1000000.00|2.60%     \n",
      "     226|        40|CASH SHORTAGE  |$869984|$-1000000.00|0.49%     \n",
      "     227|        41|CASH SHORTAGE  |$897394|$-1000000.00|0.77%     \n",
      "     228|        41|CASH SHORTAGE  |$895947|$-1000000.00|0.19%     \n",
      "     229|        38|CASH SHORTAGE  |$907425|$-1000000.00|1.48%     \n",
      "     230|        40|CASH SHORTAGE  |$875912|$-1000000.00|0.43%     \n",
      "     231|        38|CASH SHORTAGE  |$911515|$-1000000.00|2.41%     \n",
      "     232|        37|CASH SHORTAGE  |$903881|$-1000000.00|0.85%     \n",
      "     233|        39|CASH SHORTAGE  |$871673|$-1000000.00|1.53%     \n",
      "     234|        38|CASH SHORTAGE  |$912137|$-1000000.00|1.93%     \n",
      "     235|        42|CASH SHORTAGE  |$856193|$-1000000.00|0.66%     \n",
      "     236|        41|CASH SHORTAGE  |$892861|$-1000000.00|1.85%     \n",
      "     237|        42|CASH SHORTAGE  |$859186|$-1000000.00|1.06%     \n",
      "     238|        41|CASH SHORTAGE  |$897591|$-1000000.00|1.34%     \n",
      "     239|        43|CASH SHORTAGE  |$856282|$-1000000.00|0.37%     \n",
      "     240|        42|CASH SHORTAGE  |$859187|$-1000000.00|0.63%     \n",
      "     241|        41|CASH SHORTAGE  |$889925|$-1000000.00|0.34%     \n",
      "     242|        41|CASH SHORTAGE  |$897211|$-1000000.00|0.78%     \n",
      "     243|        42|CASH SHORTAGE  |$861523|$-1000000.00|0.54%     \n",
      "     244|        44|CASH SHORTAGE  |$852899|$-1000000.00|0.48%     \n",
      "     245|        44|CASH SHORTAGE  |$866284|$-1000000.00|1.68%     \n",
      "     246|        41|CASH SHORTAGE  |$895688|$-1000000.00|1.99%     \n",
      "     247|        42|CASH SHORTAGE  |$864444|$-1000000.00|1.26%     \n",
      "     248|        41|CASH SHORTAGE  |$904194|$-1000000.00|2.25%     \n",
      "     249|        43|CASH SHORTAGE  |$869952|$-1000000.00|1.19%     \n",
      "     250|        41|CASH SHORTAGE  |$895899|$-1000000.00|1.38%     \n",
      "     251|        42|CASH SHORTAGE  |$860599|$-1000000.00|0.39%     \n",
      "     252|        41|CASH SHORTAGE  |$890865|$-1000000.00|1.87%     \n",
      "     253|        42|CASH SHORTAGE  |$855897|$-1000000.00|1.08%     \n",
      "     254|        42|CASH SHORTAGE  |$854382|$-1000000.00|0.54%     \n",
      "     255|        42|CASH SHORTAGE  |$855511|$-1000000.00|0.99%     \n",
      "     256|        42|CASH SHORTAGE  |$860883|$-1000000.00|2.44%     \n",
      "     257|        42|CASH SHORTAGE  |$857894|$-1000000.00|0.14%     \n",
      "     258|        41|CASH SHORTAGE  |$895283|$-1000000.00|2.22%     \n",
      "     259|        43|CASH SHORTAGE  |$862349|$-1000000.00|1.32%     \n",
      "     260|        43|CASH SHORTAGE  |$862547|$-1000000.00|1.69%     \n",
      "     261|        44|CASH SHORTAGE  |$859342|$-1000000.00|1.21%     \n",
      "     262|        43|CASH SHORTAGE  |$859797|$-1000000.00|2.16%     \n",
      "     263|        46|CASH SHORTAGE  |$917954|$-1000000.00|0.42%     \n",
      "     264|        44|CASH SHORTAGE  |$858718|$-1000000.00|1.92%     \n",
      "     265|        45|CASH SHORTAGE  |$917554|$-1000000.00|1.94%     \n",
      "     266|        46|CASH SHORTAGE  |$917509|$-1000000.00|1.02%     \n",
      "     267|        47|CASH SHORTAGE  |$955383|$-1000000.00|2.45%     \n",
      "     268|        45|CASH SHORTAGE  |$915905|$-1000000.00|0.34%     \n",
      "     269|        46|CASH SHORTAGE  |$918400|$-1000000.00|2.40%     \n",
      "     270|        46|CASH SHORTAGE  |$918735|$-1000000.00|1.75%     \n",
      "     271|        47|CASH SHORTAGE  |$951551|$-1000000.00|0.11%     \n",
      "     272|        45|CASH SHORTAGE  |$916384|$-1000000.00|1.53%     \n",
      "     273|        46|CASH SHORTAGE  |$917525|$-1000000.00|0.39%     \n",
      "     274|        46|CASH SHORTAGE  |$915736|$-1000000.00|0.28%     \n",
      "     275|        46|CASH SHORTAGE  |$918232|$-1000000.00|0.92%     \n",
      "     276|        46|CASH SHORTAGE  |$919085|$-1000000.00|0.64%     \n",
      "     277|        45|CASH SHORTAGE  |$913154|$-1000000.00|2.63%     \n",
      "     278|        46|CASH SHORTAGE  |$918501|$-1000000.00|2.12%     \n",
      "     279|        46|CASH SHORTAGE  |$918427|$-1000000.00|0.36%     \n",
      "     280|        46|CASH SHORTAGE  |$919267|$-1000000.00|1.56%     \n",
      "     281|        46|CASH SHORTAGE  |$915737|$-1000000.00|1.19%     \n",
      "     282|        46|CASH SHORTAGE  |$916837|$-1000000.00|1.53%     \n",
      "     283|        45|CASH SHORTAGE  |$913733|$-1000000.00|2.06%     \n",
      "     284|        45|CASH SHORTAGE  |$912333|$-1000000.00|1.28%     \n",
      "     285|        44|CASH SHORTAGE  |$857290|$-1000000.00|2.24%     \n",
      "     286|        45|CASH SHORTAGE  |$912650|$-1000000.00|0.54%     \n",
      "     287|        45|CASH SHORTAGE  |$914044|$-1000000.00|2.00%     \n",
      "     288|        45|CASH SHORTAGE  |$911638|$-1000000.00|1.53%     \n",
      "     289|        45|CASH SHORTAGE  |$910525|$-1000000.00|0.69%     \n",
      "     290|        45|CASH SHORTAGE  |$913395|$-1000000.00|0.26%     \n",
      "     291|        45|CASH SHORTAGE  |$913877|$-1000000.00|0.68%     \n",
      "     292|        45|CASH SHORTAGE  |$908484|$-1000000.00|0.74%     \n",
      "     293|        44|CASH SHORTAGE  |$857400|$-1000000.00|1.66%     \n",
      "     294|        44|CASH SHORTAGE  |$857962|$-1000000.00|1.98%     \n",
      "     295|        45|CASH SHORTAGE  |$908851|$-1000000.00|0.45%     \n",
      "     296|        45|CASH SHORTAGE  |$908535|$-1000000.00|0.91%     \n",
      "     297|        45|CASH SHORTAGE  |$907964|$-1000000.00|1.47%     \n",
      "     298|        44|CASH SHORTAGE  |$854363|$-1000000.00|0.76%     \n",
      "     299|        45|CASH SHORTAGE  |$910038|$-1000000.00|1.38%     \n",
      "     300|        44|CASH SHORTAGE  |$856430|$-1000000.00|0.47%     \n",
      "     301|        45|CASH SHORTAGE  |$905419|$-1000000.00|0.48%     \n",
      "     302|        45|CASH SHORTAGE  |$907590|$-1000000.00|0.63%     \n",
      "     303|        45|CASH SHORTAGE  |$904816|$-1000000.00|1.79%     \n",
      "     304|        45|CASH SHORTAGE  |$907798|$-1000000.00|1.69%     \n",
      "     305|        46|CASH SHORTAGE  |$909376|$-1000000.00|0.26%     \n",
      "     306|        45|CASH SHORTAGE  |$906025|$-1000000.00|0.48%     \n",
      "     307|        45|CASH SHORTAGE  |$906048|$-1000000.00|0.93%     \n",
      "     308|        46|CASH SHORTAGE  |$912045|$-1000000.00|0.72%     \n",
      "     309|        46|CASH SHORTAGE  |$909862|$-1000000.00|0.62%     \n",
      "     310|        45|CASH SHORTAGE  |$908171|$-1000000.00|2.04%     \n",
      "     311|        45|CASH SHORTAGE  |$907259|$-1000000.00|1.17%     \n",
      "     312|        45|CASH SHORTAGE  |$906469|$-1000000.00|1.32%     \n",
      "     313|        45|CASH SHORTAGE  |$905349|$-1000000.00|1.37%     \n",
      "     314|        45|CASH SHORTAGE  |$906899|$-1000000.00|1.27%     \n",
      "     315|        44|CASH SHORTAGE  |$856727|$-1000000.00|2.03%     \n",
      "     316|        45|CASH SHORTAGE  |$906118|$-1000000.00|0.81%     \n",
      "     317|        45|CASH SHORTAGE  |$908508|$-1000000.00|1.78%     \n",
      "     318|        46|CASH SHORTAGE  |$913054|$-1000000.00|0.84%     \n",
      "     319|        45|CASH SHORTAGE  |$907624|$-1000000.00|2.70%     \n",
      "     320|        45|CASH SHORTAGE  |$907346|$-1000000.00|0.89%     \n",
      "     321|        45|CASH SHORTAGE  |$907473|$-1000000.00|1.06%     \n",
      "     322|        46|CASH SHORTAGE  |$911485|$-1000000.00|1.86%     \n",
      "     323|        46|CASH SHORTAGE  |$912058|$-1000000.00|1.54%     \n",
      "     324|        46|CASH SHORTAGE  |$912083|$-1000000.00|1.35%     \n",
      "     325|        46|CASH SHORTAGE  |$910902|$-1000000.00|0.69%     \n",
      "     326|        46|CASH SHORTAGE  |$911024|$-1000000.00|1.81%     \n",
      "     327|        46|CASH SHORTAGE  |$908209|$-1000000.00|1.32%     \n",
      "     328|        46|CASH SHORTAGE  |$910895|$-1000000.00|0.37%     \n",
      "     329|        46|CASH SHORTAGE  |$912956|$-1000000.00|1.68%     \n",
      "     330|        45|CASH SHORTAGE  |$909691|$-1000000.00|2.49%     \n",
      "     331|        44|CASH SHORTAGE  |$854737|$-1000000.00|0.92%     \n",
      "     332|        44|CASH SHORTAGE  |$856387|$-1000000.00|0.85%     \n",
      "     333|        43|CASH SHORTAGE  |$858917|$-1000000.00|0.88%     \n",
      "     334|        44|CASH SHORTAGE  |$855923|$-1000000.00|0.30%     \n",
      "     335|        44|CASH SHORTAGE  |$855609|$-1000000.00|0.43%     \n",
      "     336|        44|CASH SHORTAGE  |$853784|$-1000000.00|0.90%     \n",
      "     337|        43|CASH SHORTAGE  |$856515|$-1000000.00|0.98%     \n",
      "     338|        43|CASH SHORTAGE  |$859875|$-1000000.00|0.86%     \n",
      "     339|        42|CASH SHORTAGE  |$855063|$-1000000.00|1.76%     \n",
      "     340|        44|CASH SHORTAGE  |$854530|$-1000000.00|0.60%     \n",
      "     341|        45|CASH SHORTAGE  |$907477|$-1000000.00|0.43%     \n",
      "     342|        42|CASH SHORTAGE  |$856325|$-1000000.00|1.29%     \n",
      "     343|        43|CASH SHORTAGE  |$856071|$-1000000.00|0.16%     \n",
      "     344|        43|CASH SHORTAGE  |$856372|$-1000000.00|1.47%     \n",
      "     345|        42|CASH SHORTAGE  |$857215|$-1000000.00|1.10%     \n",
      "     346|        44|CASH SHORTAGE  |$854682|$-1000000.00|0.24%     \n",
      "     347|        43|CASH SHORTAGE  |$856862|$-1000000.00|1.49%     \n",
      "     348|        43|CASH SHORTAGE  |$854348|$-1000000.00|1.13%     \n",
      "     349|        43|CASH SHORTAGE  |$855814|$-1000000.00|2.28%     \n",
      "     350|        42|CASH SHORTAGE  |$856607|$-1000000.00|1.72%     \n",
      "     351|        43|CASH SHORTAGE  |$855567|$-1000000.00|1.98%     \n",
      "     352|        43|CASH SHORTAGE  |$856468|$-1000000.00|0.80%     \n",
      "     353|        44|CASH SHORTAGE  |$853693|$-1000000.00|0.23%     \n",
      "     354|        44|CASH SHORTAGE  |$854369|$-1000000.00|0.35%     \n",
      "     355|        41|CASH SHORTAGE  |$893351|$-1000000.00|1.75%     \n",
      "     356|        42|CASH SHORTAGE  |$857221|$-1000000.00|1.48%     \n",
      "     357|        44|CASH SHORTAGE  |$853938|$-1000000.00|0.84%     \n",
      "     358|        43|CASH SHORTAGE  |$857259|$-1000000.00|2.00%     \n",
      "     359|        43|CASH SHORTAGE  |$856485|$-1000000.00|1.14%     \n",
      "     360|        42|CASH SHORTAGE  |$862232|$-1000000.00|1.68%     \n",
      "     361|        42|CASH SHORTAGE  |$860009|$-1000000.00|0.64%     \n",
      "     362|        41|CASH SHORTAGE  |$896992|$-1000000.00|1.55%     \n",
      "     363|        41|CASH SHORTAGE  |$897398|$-1000000.00|1.93%     \n",
      "     364|        42|CASH SHORTAGE  |$859471|$-1000000.00|0.86%     \n",
      "     365|        41|CASH SHORTAGE  |$896838|$-1000000.00|2.35%     \n",
      "     366|        41|CASH SHORTAGE  |$898296|$-1000000.00|1.28%     \n",
      "     367|        43|CASH SHORTAGE  |$855274|$-1000000.00|0.31%     \n",
      "     368|        42|CASH SHORTAGE  |$859825|$-1000000.00|0.26%     \n",
      "     369|        45|CASH SHORTAGE  |$909349|$-1000000.00|0.45%     \n",
      "     370|        43|CASH SHORTAGE  |$859186|$-1000000.00|1.12%     \n",
      "     371|        41|CASH SHORTAGE  |$896617|$-1000000.00|0.71%     \n",
      "     372|        43|CASH SHORTAGE  |$855949|$-1000000.00|1.64%     \n",
      "     373|        44|CASH SHORTAGE  |$855458|$-1000000.00|0.16%     \n",
      "     374|        43|CASH SHORTAGE  |$857571|$-1000000.00|1.18%     \n",
      "     375|        44|CASH SHORTAGE  |$854261|$-1000000.00|0.33%     \n",
      "     376|        42|CASH SHORTAGE  |$858830|$-1000000.00|1.32%     \n",
      "     377|        40|CASH SHORTAGE  |$872523|$-1000000.00|1.38%     \n",
      "     378|        42|CASH SHORTAGE  |$860687|$-1000000.00|1.57%     \n",
      "     379|        42|CASH SHORTAGE  |$857628|$-1000000.00|0.60%     \n",
      "     380|        41|CASH SHORTAGE  |$893593|$-1000000.00|0.06%     \n",
      "     381|        41|CASH SHORTAGE  |$894125|$-1000000.00|1.37%     \n",
      "     382|        40|CASH SHORTAGE  |$868045|$-1000000.00|0.38%     \n",
      "     383|        42|CASH SHORTAGE  |$861376|$-1000000.00|2.08%     \n",
      "     384|        41|CASH SHORTAGE  |$895743|$-1000000.00|1.62%     \n",
      "     385|        41|CASH SHORTAGE  |$895684|$-1000000.00|1.58%     \n",
      "     386|        42|CASH SHORTAGE  |$861481|$-1000000.00|1.88%     \n",
      "     387|        43|CASH SHORTAGE  |$861628|$-1000000.00|2.38%     \n",
      "     388|        43|CASH SHORTAGE  |$860008|$-1000000.00|1.07%     \n",
      "     389|        43|CASH SHORTAGE  |$860010|$-1000000.00|1.55%     \n",
      "     390|        43|CASH SHORTAGE  |$856587|$-1000000.00|0.50%     \n",
      "     391|        43|CASH SHORTAGE  |$859429|$-1000000.00|1.90%     \n",
      "     392|        43|CASH SHORTAGE  |$858305|$-1000000.00|1.47%     \n",
      "     393|        43|CASH SHORTAGE  |$858686|$-1000000.00|1.30%     \n",
      "     394|        43|CASH SHORTAGE  |$855362|$-1000000.00|0.42%     \n",
      "     395|        43|CASH SHORTAGE  |$856322|$-1000000.00|0.31%     \n",
      "     396|        43|CASH SHORTAGE  |$858532|$-1000000.00|1.63%     \n",
      "     397|        43|CASH SHORTAGE  |$855827|$-1000000.00|0.13%     \n",
      "     398|        43|CASH SHORTAGE  |$861493|$-1000000.00|2.19%     \n",
      "     399|        43|CASH SHORTAGE  |$861484|$-1000000.00|2.04%     \n",
      "     400|        43|CASH SHORTAGE  |$860327|$-1000000.00|0.56%     \n",
      "     401|        42|CASH SHORTAGE  |$862648|$-1000000.00|2.34%     \n",
      "     402|        43|CASH SHORTAGE  |$856138|$-1000000.00|0.34%     \n",
      "     403|        43|CASH SHORTAGE  |$858058|$-1000000.00|0.27%     \n",
      "     404|        42|CASH SHORTAGE  |$861217|$-1000000.00|2.28%     \n",
      "     405|        42|CASH SHORTAGE  |$860639|$-1000000.00|2.04%     \n",
      "     406|        42|CASH SHORTAGE  |$859898|$-1000000.00|1.84%     \n",
      "     407|        43|CASH SHORTAGE  |$855381|$-1000000.00|0.40%     \n",
      "     408|        42|CASH SHORTAGE  |$860725|$-1000000.00|2.59%     \n",
      "     409|        42|CASH SHORTAGE  |$860690|$-1000000.00|2.88%     \n",
      "     410|        43|CASH SHORTAGE  |$857329|$-1000000.00|0.26%     \n",
      "     411|        42|CASH SHORTAGE  |$859457|$-1000000.00|1.74%     \n",
      "     412|        42|CASH SHORTAGE  |$859590|$-1000000.00|1.85%     \n",
      "     413|        41|CASH SHORTAGE  |$897686|$-1000000.00|2.29%     \n",
      "     414|        41|CASH SHORTAGE  |$897329|$-1000000.00|2.27%     \n",
      "     415|        42|CASH SHORTAGE  |$859194|$-1000000.00|0.74%     \n",
      "     416|        42|CASH SHORTAGE  |$858744|$-1000000.00|0.32%     \n",
      "     417|        41|CASH SHORTAGE  |$896287|$-1000000.00|1.82%     \n",
      "     418|        42|CASH SHORTAGE  |$857727|$-1000000.00|0.20%     \n",
      "     419|        41|CASH SHORTAGE  |$896764|$-1000000.00|2.05%     \n",
      "     420|        41|CASH SHORTAGE  |$896382|$-1000000.00|1.71%     \n",
      "     421|        42|CASH SHORTAGE  |$857735|$-1000000.00|0.36%     \n",
      "     422|        41|CASH SHORTAGE  |$895060|$-1000000.00|1.56%     \n",
      "     423|        41|CASH SHORTAGE  |$894783|$-1000000.00|0.37%     \n",
      "     424|        41|CASH SHORTAGE  |$896578|$-1000000.00|2.36%     \n",
      "     425|        43|CASH SHORTAGE  |$856558|$-1000000.00|0.07%     \n",
      "     426|        42|CASH SHORTAGE  |$858581|$-1000000.00|0.73%     \n",
      "     427|        42|CASH SHORTAGE  |$858052|$-1000000.00|1.27%     \n",
      "     428|        42|CASH SHORTAGE  |$859950|$-1000000.00|2.32%     \n",
      "     429|        42|CASH SHORTAGE  |$859787|$-1000000.00|2.60%     \n",
      "     430|        43|CASH SHORTAGE  |$856011|$-1000000.00|0.01%     \n",
      "     431|        41|CASH SHORTAGE  |$896286|$-1000000.00|2.42%     \n",
      "     432|        42|CASH SHORTAGE  |$860668|$-1000000.00|1.34%     \n",
      "     433|        42|CASH SHORTAGE  |$858409|$-1000000.00|1.20%     \n",
      "     434|        42|CASH SHORTAGE  |$857579|$-1000000.00|0.41%     \n",
      "     435|        42|CASH SHORTAGE  |$858021|$-1000000.00|0.89%     \n",
      "     436|        41|CASH SHORTAGE  |$896387|$-1000000.00|1.98%     \n",
      "     437|        42|CASH SHORTAGE  |$856983|$-1000000.00|0.51%     \n",
      "     438|        41|CASH SHORTAGE  |$895834|$-1000000.00|2.09%     \n",
      "     439|        42|CASH SHORTAGE  |$858196|$-1000000.00|0.57%     \n",
      "     440|        42|CASH SHORTAGE  |$855959|$-1000000.00|0.58%     \n",
      "     441|        42|CASH SHORTAGE  |$856919|$-1000000.00|0.19%     \n",
      "     442|        41|CASH SHORTAGE  |$894905|$-1000000.00|1.44%     \n",
      "     443|        43|CASH SHORTAGE  |$855474|$-1000000.00|0.32%     \n",
      "     444|        41|CASH SHORTAGE  |$896151|$-1000000.00|2.37%     \n",
      "     445|        42|CASH SHORTAGE  |$856601|$-1000000.00|0.60%     \n",
      "     446|        42|CASH SHORTAGE  |$857039|$-1000000.00|0.43%     \n",
      "     447|        41|CASH SHORTAGE  |$894628|$-1000000.00|2.05%     \n",
      "     448|        42|CASH SHORTAGE  |$857571|$-1000000.00|0.30%     \n",
      "     449|        41|CASH SHORTAGE  |$896093|$-1000000.00|2.16%     \n",
      "     450|        42|CASH SHORTAGE  |$858206|$-1000000.00|0.96%     \n",
      "     451|        41|CASH SHORTAGE  |$895522|$-1000000.00|1.84%     \n",
      "     452|        41|CASH SHORTAGE  |$895970|$-1000000.00|1.92%     \n",
      "     453|        42|CASH SHORTAGE  |$857559|$-1000000.00|0.67%     \n",
      "     454|        41|CASH SHORTAGE  |$896142|$-1000000.00|2.08%     \n",
      "     455|        41|CASH SHORTAGE  |$894785|$-1000000.00|1.49%     \n",
      "     456|        42|CASH SHORTAGE  |$857297|$-1000000.00|1.32%     \n",
      "     457|        41|CASH SHORTAGE  |$894645|$-1000000.00|0.24%     \n",
      "     458|        42|CASH SHORTAGE  |$856284|$-1000000.00|0.31%     \n",
      "     459|        42|CASH SHORTAGE  |$857787|$-1000000.00|1.30%     \n",
      "     460|        42|CASH SHORTAGE  |$857266|$-1000000.00|0.50%     \n",
      "     461|        41|CASH SHORTAGE  |$895552|$-1000000.00|2.31%     \n",
      "     462|        41|CASH SHORTAGE  |$895465|$-1000000.00|1.43%     \n",
      "     463|        41|CASH SHORTAGE  |$895568|$-1000000.00|1.24%     \n",
      "     464|        41|CASH SHORTAGE  |$894526|$-1000000.00|0.62%     \n",
      "     465|        42|CASH SHORTAGE  |$857757|$-1000000.00|0.49%     \n",
      "     466|        41|CASH SHORTAGE  |$896230|$-1000000.00|1.73%     \n",
      "     467|        42|CASH SHORTAGE  |$855899|$-1000000.00|0.30%     \n",
      "     468|        41|CASH SHORTAGE  |$895172|$-1000000.00|1.40%     \n",
      "     469|        41|CASH SHORTAGE  |$895845|$-1000000.00|1.76%     \n",
      "     470|        42|CASH SHORTAGE  |$856379|$-1000000.00|0.33%     \n",
      "     471|        42|CASH SHORTAGE  |$855504|$-1000000.00|0.01%     \n",
      "     472|        41|CASH SHORTAGE  |$896308|$-1000000.00|1.87%     \n",
      "     473|        40|CASH SHORTAGE  |$872307|$-1000000.00|1.93%     \n",
      "     474|        41|CASH SHORTAGE  |$894391|$-1000000.00|1.86%     \n",
      "     475|        41|CASH SHORTAGE  |$894317|$-1000000.00|1.91%     \n",
      "     476|        41|CASH SHORTAGE  |$894812|$-1000000.00|0.17%     \n",
      "     477|        40|CASH SHORTAGE  |$870431|$-1000000.00|0.81%     \n",
      "     478|        41|CASH SHORTAGE  |$893680|$-1000000.00|0.21%     \n",
      "     479|        41|CASH SHORTAGE  |$893884|$-1000000.00|0.11%     \n",
      "     480|        40|CASH SHORTAGE  |$872021|$-1000000.00|2.35%     \n",
      "     481|        41|CASH SHORTAGE  |$893222|$-1000000.00|0.82%     \n",
      "     482|        40|CASH SHORTAGE  |$871146|$-1000000.00|1.61%     \n",
      "     483|        41|CASH SHORTAGE  |$892842|$-1000000.00|0.72%     \n",
      "     484|        41|CASH SHORTAGE  |$893718|$-1000000.00|1.21%     \n",
      "     485|        41|CASH SHORTAGE  |$894866|$-1000000.00|1.93%     \n",
      "     486|        42|CASH SHORTAGE  |$856647|$-1000000.00|0.23%     \n",
      "     487|        42|CASH SHORTAGE  |$855585|$-1000000.00|0.45%     \n",
      "     488|        41|CASH SHORTAGE  |$894643|$-1000000.00|1.41%     \n",
      "     489|        42|CASH SHORTAGE  |$855942|$-1000000.00|1.45%     \n",
      "     490|        40|CASH SHORTAGE  |$870329|$-1000000.00|1.96%     \n",
      "     491|        42|CASH SHORTAGE  |$853594|$-1000000.00|0.22%     \n",
      "     492|        41|CASH SHORTAGE  |$889673|$-1000000.00|0.52%     \n",
      "     493|        41|CASH SHORTAGE  |$893833|$-1000000.00|1.88%     \n",
      "     494|        42|CASH SHORTAGE  |$854547|$-1000000.00|0.29%     \n",
      "     495|        41|CASH SHORTAGE  |$892295|$-1000000.00|1.07%     \n",
      "     496|        42|CASH SHORTAGE  |$854541|$-1000000.00|0.52%     \n",
      "     497|        42|CASH SHORTAGE  |$856296|$-1000000.00|0.55%     \n",
      "     498|        41|CASH SHORTAGE  |$894038|$-1000000.00|0.43%     \n",
      "     499|        42|CASH SHORTAGE  |$857967|$-1000000.00|0.80%     \n",
      "     500|        41|CASH SHORTAGE  |$893199|$-1000000.00|2.52%     \n",
      "     501|        41|CASH SHORTAGE  |$893784|$-1000000.00|1.42%     \n",
      "     502|        41|CASH SHORTAGE  |$891857|$-1000000.00|1.15%     \n",
      "     503|        41|CASH SHORTAGE  |$893277|$-1000000.00|0.15%     \n",
      "     504|        41|CASH SHORTAGE  |$893814|$-1000000.00|0.38%     \n",
      "     505|        41|CASH SHORTAGE  |$894855|$-1000000.00|2.63%     \n",
      "     506|        42|CASH SHORTAGE  |$856925|$-1000000.00|1.14%     \n",
      "     507|        41|CASH SHORTAGE  |$893901|$-1000000.00|0.18%     \n",
      "     508|        41|CASH SHORTAGE  |$895605|$-1000000.00|2.74%     \n",
      "     509|        42|CASH SHORTAGE  |$857793|$-1000000.00|0.79%     \n",
      "     510|        42|CASH SHORTAGE  |$854750|$-1000000.00|0.36%     \n",
      "     511|        41|CASH SHORTAGE  |$894710|$-1000000.00|0.25%     \n",
      "     512|        42|CASH SHORTAGE  |$854109|$-1000000.00|1.42%     \n",
      "     513|        42|CASH SHORTAGE  |$857014|$-1000000.00|2.10%     \n",
      "     514|        42|CASH SHORTAGE  |$855854|$-1000000.00|0.87%     \n",
      "     515|        43|CASH SHORTAGE  |$854264|$-1000000.00|0.51%     \n",
      "     516|        42|CASH SHORTAGE  |$857269|$-1000000.00|0.98%     \n",
      "     517|        42|CASH SHORTAGE  |$857449|$-1000000.00|2.04%     \n",
      "     518|        42|CASH SHORTAGE  |$856330|$-1000000.00|2.34%     \n",
      "     519|        42|CASH SHORTAGE  |$856340|$-1000000.00|0.81%     \n",
      "     520|        42|CASH SHORTAGE  |$857282|$-1000000.00|0.99%     \n",
      "     521|        42|CASH SHORTAGE  |$857225|$-1000000.00|1.57%     \n",
      "     522|        42|CASH SHORTAGE  |$857395|$-1000000.00|0.95%     \n",
      "     523|        42|CASH SHORTAGE  |$856852|$-1000000.00|1.22%     \n",
      "     524|        42|CASH SHORTAGE  |$855300|$-1000000.00|0.16%     \n",
      "     525|        42|CASH SHORTAGE  |$858919|$-1000000.00|1.63%     \n",
      "     526|        42|CASH SHORTAGE  |$857998|$-1000000.00|2.22%     \n",
      "     527|        41|CASH SHORTAGE  |$894986|$-1000000.00|2.18%     \n",
      "     528|        42|CASH SHORTAGE  |$856238|$-1000000.00|0.48%     \n",
      "     529|        41|CASH SHORTAGE  |$895743|$-1000000.00|2.34%     \n",
      "     530|        42|CASH SHORTAGE  |$855712|$-1000000.00|0.30%     \n",
      "     531|        41|CASH SHORTAGE  |$895823|$-1000000.00|2.12%     \n",
      "     532|        41|CASH SHORTAGE  |$895022|$-1000000.00|1.98%     \n",
      "     533|        41|CASH SHORTAGE  |$895264|$-1000000.00|1.54%     \n",
      "     534|        42|CASH SHORTAGE  |$857009|$-1000000.00|0.91%     \n",
      "     535|        42|CASH SHORTAGE  |$855572|$-1000000.00|0.69%     \n",
      "     536|        41|CASH SHORTAGE  |$894908|$-1000000.00|1.92%     \n",
      "     537|        42|CASH SHORTAGE  |$855833|$-1000000.00|0.61%     \n",
      "     538|        42|CASH SHORTAGE  |$856231|$-1000000.00|0.83%     \n",
      "     539|        41|CASH SHORTAGE  |$895564|$-1000000.00|0.46%     \n",
      "     540|        41|CASH SHORTAGE  |$894615|$-1000000.00|1.20%     \n",
      "     541|        41|CASH SHORTAGE  |$895658|$-1000000.00|0.40%     \n",
      "     542|        42|CASH SHORTAGE  |$856414|$-1000000.00|0.59%     \n",
      "     543|        41|CASH SHORTAGE  |$895425|$-1000000.00|1.78%     \n",
      "     544|        41|CASH SHORTAGE  |$894358|$-1000000.00|2.11%     \n",
      "     545|        41|CASH SHORTAGE  |$895284|$-1000000.00|1.87%     \n",
      "     546|        42|CASH SHORTAGE  |$857567|$-1000000.00|0.09%     \n",
      "     547|        42|CASH SHORTAGE  |$856949|$-1000000.00|0.05%     \n",
      "     548|        41|CASH SHORTAGE  |$895875|$-1000000.00|1.91%     \n",
      "     549|        41|CASH SHORTAGE  |$897240|$-1000000.00|0.24%     \n",
      "     550|        41|CASH SHORTAGE  |$897038|$-1000000.00|2.05%     \n",
      "     551|        42|CASH SHORTAGE  |$857748|$-1000000.00|0.42%     \n",
      "     552|        42|CASH SHORTAGE  |$857223|$-1000000.00|1.58%     \n",
      "     553|        41|CASH SHORTAGE  |$896625|$-1000000.00|1.09%     \n",
      "     554|        42|CASH SHORTAGE  |$857940|$-1000000.00|1.90%     \n",
      "     555|        42|CASH SHORTAGE  |$858456|$-1000000.00|2.52%     \n",
      "     556|        42|CASH SHORTAGE  |$856234|$-1000000.00|0.57%     \n",
      "     557|        42|CASH SHORTAGE  |$857473|$-1000000.00|1.48%     \n",
      "     558|        42|CASH SHORTAGE  |$855783|$-1000000.00|0.73%     \n",
      "     559|        42|CASH SHORTAGE  |$856267|$-1000000.00|0.58%     \n",
      "     560|        43|CASH SHORTAGE  |$852908|$-1000000.00|2.08%     \n",
      "     561|        41|CASH SHORTAGE  |$895182|$-1000000.00|1.29%     \n",
      "     562|        42|CASH SHORTAGE  |$854950|$-1000000.00|0.20%     \n",
      "     563|        41|CASH SHORTAGE  |$896400|$-1000000.00|1.94%     \n",
      "     564|        41|CASH SHORTAGE  |$895399|$-1000000.00|0.74%     \n",
      "     565|        42|CASH SHORTAGE  |$857896|$-1000000.00|1.03%     \n",
      "     566|        42|CASH SHORTAGE  |$856798|$-1000000.00|1.62%     \n",
      "     567|        42|CASH SHORTAGE  |$855680|$-1000000.00|0.46%     \n",
      "     568|        42|CASH SHORTAGE  |$859198|$-1000000.00|1.33%     \n",
      "     569|        41|CASH SHORTAGE  |$892934|$-1000000.00|0.49%     \n",
      "     570|        40|CASH SHORTAGE  |$872547|$-1000000.00|1.45%     \n",
      "     571|        40|CASH SHORTAGE  |$873281|$-1000000.00|2.37%     \n",
      "     572|        42|CASH SHORTAGE  |$856822|$-1000000.00|0.17%     \n",
      "     573|        42|CASH SHORTAGE  |$859252|$-1000000.00|1.07%     \n",
      "     574|        41|CASH SHORTAGE  |$894419|$-1000000.00|1.37%     \n",
      "     575|        42|CASH SHORTAGE  |$857488|$-1000000.00|0.94%     \n",
      "     576|        42|CASH SHORTAGE  |$858249|$-1000000.00|0.88%     \n",
      "     577|        42|CASH SHORTAGE  |$860016|$-1000000.00|1.49%     \n",
      "     578|        43|CASH SHORTAGE  |$856900|$-1000000.00|0.96%     \n",
      "     579|        42|CASH SHORTAGE  |$858871|$-1000000.00|1.70%     \n",
      "     580|        43|CASH SHORTAGE  |$855960|$-1000000.00|0.81%     \n",
      "     581|        42|CASH SHORTAGE  |$858452|$-1000000.00|0.96%     \n",
      "     582|        41|CASH SHORTAGE  |$895392|$-1000000.00|1.05%     \n",
      "     583|        42|CASH SHORTAGE  |$857110|$-1000000.00|1.31%     \n",
      "     584|        43|CASH SHORTAGE  |$855593|$-1000000.00|0.78%     \n",
      "     585|        44|CASH SHORTAGE  |$854538|$-1000000.00|0.67%     \n",
      "     586|        42|CASH SHORTAGE  |$861308|$-1000000.00|2.47%     \n",
      "     587|        44|CASH SHORTAGE  |$857960|$-1000000.00|0.95%     \n",
      "     588|        43|CASH SHORTAGE  |$857077|$-1000000.00|1.81%     \n",
      "     589|        44|CASH SHORTAGE  |$856848|$-1000000.00|1.45%     \n",
      "     590|        43|CASH SHORTAGE  |$859567|$-1000000.00|2.06%     \n",
      "     591|        42|CASH SHORTAGE  |$865579|$-1000000.00|1.12%     \n",
      "     592|        43|CASH SHORTAGE  |$858768|$-1000000.00|1.72%     \n",
      "     593|        42|CASH SHORTAGE  |$862776|$-1000000.00|2.37%     \n",
      "     594|        44|CASH SHORTAGE  |$859680|$-1000000.00|0.86%     \n",
      "     595|        43|CASH SHORTAGE  |$860434|$-1000000.00|1.13%     \n",
      "     596|        42|CASH SHORTAGE  |$861118|$-1000000.00|3.22%     \n",
      "     597|        45|CASH SHORTAGE  |$906904|$-1000000.00|1.58%     \n",
      "     598|        43|CASH SHORTAGE  |$858590|$-1000000.00|0.49%     \n",
      "     599|        45|CASH SHORTAGE  |$907712|$-1000000.00|0.52%     \n",
      "     600|        47|CASH SHORTAGE  |$943444|$-1000000.00|0.61%     \n",
      "     601|        45|CASH SHORTAGE  |$906212|$-1000000.00|0.04%     \n",
      "     602|        47|CASH SHORTAGE  |$944625|$-1000000.00|1.02%     \n",
      "     603|        46|CASH SHORTAGE  |$910165|$-1000000.00|1.80%     \n",
      "     604|        47|CASH SHORTAGE  |$943054|$-1000000.00|0.32%     \n",
      "     605|        46|CASH SHORTAGE  |$912623|$-1000000.00|0.15%     \n",
      "     606|        46|CASH SHORTAGE  |$911376|$-1000000.00|0.35%     \n",
      "     607|        45|CASH SHORTAGE  |$908039|$-1000000.00|1.47%     \n",
      "     608|        48|CASH SHORTAGE  |$945055|$-1000000.00|0.52%     \n",
      "     609|        47|CASH SHORTAGE  |$941588|$-1000000.00|1.28%     \n",
      "     610|        46|CASH SHORTAGE  |$911009|$-1000000.00|1.24%     \n",
      "     611|        46|CASH SHORTAGE  |$908327|$-1000000.00|0.60%     \n",
      "     612|        48|CASH SHORTAGE  |$943599|$-1000000.00|2.23%     \n",
      "     613|        50|CASH SHORTAGE  |$971158|$-1000000.00|0.34%     \n",
      "     614|        47|CASH SHORTAGE  |$940571|$-1000000.00|0.95%     \n",
      "     615|        52|CASH SHORTAGE  |$966957|$-1000000.00|1.26%     \n",
      "     616|        49|CASH SHORTAGE  |$939785|$-1000000.00|0.18%     \n",
      "     617|        49|CASH SHORTAGE  |$942567|$-1000000.00|0.20%     \n",
      "     618|        49|CASH SHORTAGE  |$939838|$-1000000.00|1.26%     \n",
      "     619|        50|CASH SHORTAGE  |$969547|$-1000000.00|1.76%     \n",
      "     620|        49|CASH SHORTAGE  |$941500|$-1000000.00|0.04%     \n",
      "     621|        47|CASH SHORTAGE  |$944295|$-1000000.00|1.31%     \n",
      "     622|        49|CASH SHORTAGE  |$939681|$-1000000.00|1.39%     \n",
      "     623|        51|CASH SHORTAGE  |$985371|$-1000000.00|0.71%     \n",
      "     624|        48|CASH SHORTAGE  |$945915|$-1000000.00|1.82%     \n",
      "     625|        51|CASH SHORTAGE  |$988643|$-1000000.00|0.96%     \n",
      "     626|        49|CASH SHORTAGE  |$942195|$-1000000.00|1.38%     \n",
      "     627|        53|CASH SHORTAGE  |$945397|$-1000000.00|1.53%     \n",
      "     628|        49|CASH SHORTAGE  |$940442|$-1000000.00|1.17%     \n",
      "     629|        50|CASH SHORTAGE  |$972403|$-1000000.00|0.14%     \n",
      "     630|        48|CASH SHORTAGE  |$947549|$-1000000.00|0.98%     \n",
      "     631|        50|CASH SHORTAGE  |$969238|$-1000000.00|0.22%     \n",
      "     632|        52|CASH SHORTAGE  |$967157|$-1000000.00|0.64%     \n",
      "     633|        52|CASH SHORTAGE  |$968880|$-1000000.00|1.31%     \n",
      "     634|        50|CASH SHORTAGE  |$969531|$-1000000.00|0.99%     \n",
      "     635|        47|CASH SHORTAGE  |$945634|$-1000000.00|0.76%     \n",
      "     636|        49|CASH SHORTAGE  |$943186|$-1000000.00|1.45%     \n",
      "     637|        47|CASH SHORTAGE  |$946327|$-1000000.00|0.70%     \n",
      "     638|        47|CASH SHORTAGE  |$945373|$-1000000.00|1.09%     \n",
      "     639|        47|CASH SHORTAGE  |$945228|$-1000000.00|0.46%     \n",
      "     640|        45|CASH SHORTAGE  |$911022|$-1000000.00|1.70%     \n",
      "     641|        44|CASH SHORTAGE  |$860930|$-1000000.00|0.94%     \n",
      "     642|        46|CASH SHORTAGE  |$912768|$-1000000.00|0.23%     \n",
      "     643|        45|CASH SHORTAGE  |$910274|$-1000000.00|1.04%     \n",
      "     644|        47|CASH SHORTAGE  |$942873|$-1000000.00|0.37%     \n",
      "     645|        46|CASH SHORTAGE  |$908128|$-1000000.00|0.34%     \n",
      "     646|        43|CASH SHORTAGE  |$859725|$-1000000.00|0.64%     \n",
      "     647|        43|CASH SHORTAGE  |$859537|$-1000000.00|0.51%     \n",
      "     648|        43|CASH SHORTAGE  |$857449|$-1000000.00|0.98%     \n",
      "     649|        49|CASH SHORTAGE  |$934122|$-1000000.00|1.40%     \n",
      "     650|        46|CASH SHORTAGE  |$904910|$-1000000.00|0.18%     \n",
      "     651|        45|CASH SHORTAGE  |$906934|$-1000000.00|0.54%     \n",
      "     652|        40|CASH SHORTAGE  |$874749|$-1000000.00|2.17%     \n",
      "     653|        42|CASH SHORTAGE  |$864540|$-1000000.00|1.59%     \n",
      "     654|        42|CASH SHORTAGE  |$864263|$-1000000.00|0.74%     \n",
      "     655|        43|CASH SHORTAGE  |$860065|$-1000000.00|1.11%     \n",
      "     656|        45|CASH SHORTAGE  |$907604|$-1000000.00|1.13%     \n",
      "     657|        45|CASH SHORTAGE  |$908659|$-1000000.00|0.41%     \n",
      "     658|        43|CASH SHORTAGE  |$857986|$-1000000.00|1.34%     \n",
      "     659|        42|CASH SHORTAGE  |$861208|$-1000000.00|0.96%     \n",
      "     660|        45|CASH SHORTAGE  |$905838|$-1000000.00|0.10%     \n",
      "     661|        44|CASH SHORTAGE  |$857437|$-1000000.00|0.60%     \n",
      "     662|        42|CASH SHORTAGE  |$864167|$-1000000.00|1.71%     \n",
      "     663|        42|CASH SHORTAGE  |$861268|$-1000000.00|1.04%     \n",
      "     664|        43|CASH SHORTAGE  |$859955|$-1000000.00|1.50%     \n",
      "     665|        41|CASH SHORTAGE  |$893600|$-1000000.00|0.97%     \n",
      "     666|        41|CASH SHORTAGE  |$892938|$-1000000.00|0.88%     \n",
      "     667|        41|CASH SHORTAGE  |$890059|$-1000000.00|0.27%     \n",
      "     668|        42|CASH SHORTAGE  |$858256|$-1000000.00|0.83%     \n",
      "     669|        41|CASH SHORTAGE  |$895874|$-1000000.00|0.70%     \n",
      "     670|        43|CASH SHORTAGE  |$853935|$-1000000.00|0.04%     \n",
      "     671|        45|CASH SHORTAGE  |$903492|$-1000000.00|0.29%     \n",
      "     672|        43|CASH SHORTAGE  |$856149|$-1000000.00|2.08%     \n",
      "     673|        42|CASH SHORTAGE  |$860455|$-1000000.00|0.54%     \n",
      "     674|        42|CASH SHORTAGE  |$864761|$-1000000.00|2.99%     \n",
      "     675|        40|CASH SHORTAGE  |$873402|$-1000000.00|0.06%     \n",
      "     676|        39|CASH SHORTAGE  |$875310|$-1000000.00|1.46%     \n",
      "     677|        40|CASH SHORTAGE  |$872013|$-1000000.00|0.18%     \n",
      "     678|        41|CASH SHORTAGE  |$896347|$-1000000.00|1.47%     \n",
      "     679|        39|CASH SHORTAGE  |$872172|$-1000000.00|0.92%     \n",
      "     680|        40|CASH SHORTAGE  |$872866|$-1000000.00|2.17%     \n",
      "     681|        42|CASH SHORTAGE  |$859795|$-1000000.00|0.61%     \n",
      "     682|        41|CASH SHORTAGE  |$896020|$-1000000.00|0.79%     \n",
      "     683|        41|CASH SHORTAGE  |$896251|$-1000000.00|1.54%     \n",
      "     684|        42|CASH SHORTAGE  |$863616|$-1000000.00|1.25%     \n",
      "     685|        45|CASH SHORTAGE  |$908886|$-1000000.00|1.32%     \n",
      "     686|        39|CASH SHORTAGE  |$868427|$-1000000.00|1.31%     \n",
      "     687|        42|CASH SHORTAGE  |$863851|$-1000000.00|1.52%     \n",
      "     688|        44|CASH SHORTAGE  |$857123|$-1000000.00|2.42%     \n",
      "     689|        42|CASH SHORTAGE  |$863222|$-1000000.00|0.86%     \n",
      "     690|        40|CASH SHORTAGE  |$866642|$-1000000.00|0.91%     \n",
      "     691|        41|CASH SHORTAGE  |$894729|$-1000000.00|0.05%     \n",
      "     692|        38|CASH SHORTAGE  |$907156|$-1000000.00|0.13%     \n",
      "     693|        39|CASH SHORTAGE  |$871765|$-1000000.00|1.18%     \n",
      "     694|        40|CASH SHORTAGE  |$868227|$-1000000.00|1.73%     \n",
      "     695|        40|CASH SHORTAGE  |$869055|$-1000000.00|0.69%     \n",
      "     696|        39|CASH SHORTAGE  |$870268|$-1000000.00|0.89%     \n",
      "     697|        38|CASH SHORTAGE  |$904748|$-1000000.00|1.74%     \n",
      "     698|        40|CASH SHORTAGE  |$867677|$-1000000.00|0.24%     \n",
      "     699|        37|CASH SHORTAGE  |$900235|$-1000000.00|0.21%     \n",
      "     700|        38|CASH SHORTAGE  |$906298|$-1000000.00|0.50%     \n",
      "     701|        37|CASH SHORTAGE  |$900539|$-1000000.00|0.71%     \n",
      "     702|        36|CASH SHORTAGE  |$906778|$-1000000.00|1.82%     \n",
      "     703|        39|CASH SHORTAGE  |$870928|$-1000000.00|2.01%     \n",
      "     704|        40|CASH SHORTAGE  |$868999|$-1000000.00|1.59%     \n",
      "     705|        39|CASH SHORTAGE  |$869245|$-1000000.00|1.01%     \n",
      "     706|        39|CASH SHORTAGE  |$871628|$-1000000.00|2.12%     \n",
      "     707|        39|CASH SHORTAGE  |$871607|$-1000000.00|1.16%     \n",
      "     708|        39|CASH SHORTAGE  |$872967|$-1000000.00|0.64%     \n",
      "     709|        39|CASH SHORTAGE  |$870926|$-1000000.00|1.53%     \n",
      "     710|        39|CASH SHORTAGE  |$870962|$-1000000.00|0.25%     \n",
      "     711|        40|CASH SHORTAGE  |$871134|$-1000000.00|0.83%     \n",
      "     712|        37|CASH SHORTAGE  |$903519|$-1000000.00|2.69%     \n",
      "     713|        40|CASH SHORTAGE  |$867001|$-1000000.00|0.17%     \n",
      "     714|        38|CASH SHORTAGE  |$903754|$-1000000.00|0.51%     \n",
      "     715|        38|CASH SHORTAGE  |$910168|$-1000000.00|0.39%     \n",
      "     716|        41|CASH SHORTAGE  |$896406|$-1000000.00|0.08%     \n",
      "     717|        38|CASH SHORTAGE  |$908964|$-1000000.00|0.78%     \n",
      "     718|        39|CASH SHORTAGE  |$871689|$-1000000.00|1.25%     \n",
      "     719|        37|CASH SHORTAGE  |$904539|$-1000000.00|2.68%     \n",
      "     720|        37|CASH SHORTAGE  |$903748|$-1000000.00|0.22%     \n",
      "     721|        37|CASH SHORTAGE  |$907008|$-1000000.00|1.01%     \n",
      "     722|        38|CASH SHORTAGE  |$907005|$-1000000.00|0.94%     \n",
      "     723|        38|CASH SHORTAGE  |$908649|$-1000000.00|2.78%     \n",
      "     724|        37|CASH SHORTAGE  |$906342|$-1000000.00|2.32%     \n",
      "     725|        40|CASH SHORTAGE  |$872878|$-1000000.00|0.46%     \n",
      "     726|        38|CASH SHORTAGE  |$908519|$-1000000.00|1.84%     \n",
      "     727|        39|CASH SHORTAGE  |$875437|$-1000000.00|0.81%     \n",
      "     728|        40|CASH SHORTAGE  |$871349|$-1000000.00|0.12%     \n",
      "     729|        39|CASH SHORTAGE  |$876842|$-1000000.00|0.61%     \n",
      "     730|        38|CASH SHORTAGE  |$910819|$-1000000.00|1.40%     \n",
      "     731|        38|CASH SHORTAGE  |$909343|$-1000000.00|1.47%     \n",
      "     732|        38|CASH SHORTAGE  |$911062|$-1000000.00|2.68%     \n",
      "     733|        36|CASH SHORTAGE  |$913375|$-1000000.00|2.64%     \n",
      "     734|        38|CASH SHORTAGE  |$912640|$-1000000.00|0.92%     \n",
      "     735|        41|CASH SHORTAGE  |$898244|$-1000000.00|0.25%     \n",
      "     736|        41|CASH SHORTAGE  |$900686|$-1000000.00|2.81%     \n",
      "     737|        38|CASH SHORTAGE  |$913768|$-1000000.00|2.71%     \n",
      "     738|        41|CASH SHORTAGE  |$898366|$-1000000.00|0.92%     \n",
      "     739|        40|CASH SHORTAGE  |$873804|$-1000000.00|0.82%     \n",
      "     740|        42|CASH SHORTAGE  |$868418|$-1000000.00|0.57%     \n",
      "     741|        39|CASH SHORTAGE  |$877463|$-1000000.00|2.37%     \n",
      "     742|        38|CASH SHORTAGE  |$910534|$-1000000.00|1.14%     \n",
      "     743|        41|CASH SHORTAGE  |$898502|$-1000000.00|1.07%     \n",
      "     744|        39|CASH SHORTAGE  |$876900|$-1000000.00|2.02%     \n",
      "     745|        40|CASH SHORTAGE  |$874567|$-1000000.00|2.02%     \n",
      "     746|        41|CASH SHORTAGE  |$897274|$-1000000.00|0.43%     \n",
      "     747|        39|CASH SHORTAGE  |$878681|$-1000000.00|2.93%     \n",
      "     748|        39|CASH SHORTAGE  |$877722|$-1000000.00|0.65%     \n",
      "     749|        39|CASH SHORTAGE  |$877900|$-1000000.00|0.87%     \n",
      "     750|        39|CASH SHORTAGE  |$875988|$-1000000.00|1.57%     \n",
      "     751|        40|CASH SHORTAGE  |$873562|$-1000000.00|0.50%     \n",
      "     752|        40|CASH SHORTAGE  |$875171|$-1000000.00|0.81%     \n",
      "     753|        40|CASH SHORTAGE  |$874174|$-1000000.00|1.93%     \n",
      "     754|        42|CASH SHORTAGE  |$865270|$-1000000.00|0.26%     \n",
      "     755|        39|CASH SHORTAGE  |$876044|$-1000000.00|0.07%     \n",
      "     756|        40|CASH SHORTAGE  |$875605|$-1000000.00|2.45%     \n",
      "     757|        42|CASH SHORTAGE  |$865428|$-1000000.00|0.37%     \n",
      "     758|        41|CASH SHORTAGE  |$897131|$-1000000.00|0.77%     \n",
      "     759|        40|CASH SHORTAGE  |$875152|$-1000000.00|1.90%     \n",
      "     760|        43|CASH SHORTAGE  |$863016|$-1000000.00|0.52%     \n",
      "     761|        45|CASH SHORTAGE  |$908487|$-1000000.00|0.53%     \n",
      "     762|        44|CASH SHORTAGE  |$859421|$-1000000.00|0.26%     \n",
      "     763|        44|CASH SHORTAGE  |$859264|$-1000000.00|1.19%     \n",
      "     764|        44|CASH SHORTAGE  |$857020|$-1000000.00|0.01%     \n",
      "     765|        41|CASH SHORTAGE  |$896772|$-1000000.00|2.71%     \n",
      "     766|        42|CASH SHORTAGE  |$863524|$-1000000.00|0.02%     \n",
      "     767|        41|CASH SHORTAGE  |$897936|$-1000000.00|1.09%     \n",
      "     768|        43|CASH SHORTAGE  |$862140|$-1000000.00|0.03%     \n",
      "     769|        41|CASH SHORTAGE  |$895509|$-1000000.00|1.53%     \n",
      "     770|        45|CASH SHORTAGE  |$906099|$-1000000.00|0.30%     \n",
      "     771|        43|CASH SHORTAGE  |$860009|$-1000000.00|1.08%     \n",
      "     772|        46|CASH SHORTAGE  |$909539|$-1000000.00|1.31%     \n",
      "     773|        46|CASH SHORTAGE  |$907204|$-1000000.00|0.64%     \n",
      "     774|        45|CASH SHORTAGE  |$907784|$-1000000.00|0.92%     \n",
      "     775|        44|CASH SHORTAGE  |$857010|$-1000000.00|0.03%     \n",
      "     776|        42|CASH SHORTAGE  |$861920|$-1000000.00|2.62%     \n",
      "     777|        42|CASH SHORTAGE  |$861439|$-1000000.00|0.65%     \n",
      "     778|        44|CASH SHORTAGE  |$857404|$-1000000.00|0.12%     \n",
      "     779|        45|CASH SHORTAGE  |$909365|$-1000000.00|0.22%     \n",
      "     780|        42|CASH SHORTAGE  |$862683|$-1000000.00|1.41%     \n",
      "     781|        41|CASH SHORTAGE  |$894192|$-1000000.00|0.94%     \n",
      "     782|        39|CASH SHORTAGE  |$873959|$-1000000.00|0.22%     \n",
      "     783|        39|CASH SHORTAGE  |$873243|$-1000000.00|2.56%     \n",
      "     784|        38|CASH SHORTAGE  |$909130|$-1000000.00|1.20%     \n",
      "     785|        40|CASH SHORTAGE  |$873074|$-1000000.00|1.56%     \n",
      "     786|        39|CASH SHORTAGE  |$874108|$-1000000.00|1.47%     \n",
      "     787|        39|CASH SHORTAGE  |$875607|$-1000000.00|1.08%     \n",
      "     788|        39|CASH SHORTAGE  |$874418|$-1000000.00|1.10%     \n",
      "     789|        41|CASH SHORTAGE  |$896482|$-1000000.00|0.29%     \n",
      "     790|        38|CASH SHORTAGE  |$909515|$-1000000.00|1.57%     \n",
      "     791|        40|CASH SHORTAGE  |$873508|$-1000000.00|1.44%     \n",
      "     792|        39|CASH SHORTAGE  |$874758|$-1000000.00|2.28%     \n",
      "     793|        39|CASH SHORTAGE  |$876395|$-1000000.00|0.03%     \n",
      "     794|        37|CASH SHORTAGE  |$904273|$-1000000.00|1.44%     \n",
      "     795|        37|CASH SHORTAGE  |$907362|$-1000000.00|1.68%     \n",
      "     796|        37|CASH SHORTAGE  |$902954|$-1000000.00|1.56%     \n",
      "     797|        37|CASH SHORTAGE  |$906305|$-1000000.00|2.32%     \n",
      "     798|        37|CASH SHORTAGE  |$905337|$-1000000.00|1.92%     \n",
      "     799|        38|CASH SHORTAGE  |$909770|$-1000000.00|0.16%     \n",
      "     800|        39|CASH SHORTAGE  |$868134|$-1000000.00|0.81%     \n",
      "     801|        40|CASH SHORTAGE  |$872481|$-1000000.00|1.58%     \n",
      "     802|        38|CASH SHORTAGE  |$909157|$-1000000.00|1.00%     \n",
      "     803|        40|CASH SHORTAGE  |$869819|$-1000000.00|0.52%     \n",
      "     804|        39|CASH SHORTAGE  |$872059|$-1000000.00|2.07%     \n",
      "     805|        40|CASH SHORTAGE  |$870761|$-1000000.00|0.67%     \n",
      "     806|        40|CASH SHORTAGE  |$870315|$-1000000.00|1.48%     \n",
      "     807|        41|CASH SHORTAGE  |$892490|$-1000000.00|0.28%     \n",
      "     808|        42|CASH SHORTAGE  |$854383|$-1000000.00|1.65%     \n",
      "     809|        45|CASH SHORTAGE  |$903200|$-1000000.00|2.10%     \n",
      "     810|        43|CASH SHORTAGE  |$855963|$-1000000.00|2.80%     \n",
      "     811|        43|CASH SHORTAGE  |$854745|$-1000000.00|1.60%     \n",
      "     812|        44|CASH SHORTAGE  |$851385|$-1000000.00|1.45%     \n",
      "     813|        41|CASH SHORTAGE  |$889441|$-1000000.00|2.05%     \n",
      "     814|        40|CASH SHORTAGE  |$870070|$-1000000.00|0.54%     \n",
      "     815|        42|CASH SHORTAGE  |$857458|$-1000000.00|0.72%     \n",
      "     816|        44|CASH SHORTAGE  |$852890|$-1000000.00|0.47%     \n",
      "     817|        40|CASH SHORTAGE  |$869226|$-1000000.00|1.60%     \n",
      "     818|        44|CASH SHORTAGE  |$848246|$-1000000.00|0.17%     \n",
      "     819|        46|CASH SHORTAGE  |$904390|$-1000000.00|0.89%     \n",
      "     820|        44|CASH SHORTAGE  |$852332|$-1000000.00|1.01%     \n",
      "     821|        44|CASH SHORTAGE  |$849756|$-1000000.00|1.22%     \n",
      "     822|        44|CASH SHORTAGE  |$849687|$-1000000.00|0.56%     \n",
      "     823|        49|CASH SHORTAGE  |$929170|$-1000000.00|0.57%     \n",
      "     824|        45|CASH SHORTAGE  |$900981|$-1000000.00|0.92%     \n",
      "     825|        47|CASH SHORTAGE  |$934820|$-1000000.00|1.23%     \n",
      "     826|        48|CASH SHORTAGE  |$935776|$-1000000.00|1.16%     \n",
      "     827|        50|CASH SHORTAGE  |$961267|$-1000000.00|2.22%     \n",
      "     828|        52|CASH SHORTAGE  |$958277|$-1000000.00|2.16%     \n",
      "     829|        51|CASH SHORTAGE  |$976210|$-1000000.00|1.29%     \n",
      "     830|        48|CASH SHORTAGE  |$934161|$-1000000.00|1.72%     \n",
      "     831|        49|CASH SHORTAGE  |$927276|$-1000000.00|1.31%     \n",
      "     832|        52|CASH SHORTAGE  |$960964|$-1000000.00|1.09%     \n",
      "     833|        51|CASH SHORTAGE  |$980069|$-1000000.00|0.96%     \n",
      "     834|        48|CASH SHORTAGE  |$936531|$-1000000.00|0.99%     \n",
      "     835|        50|CASH SHORTAGE  |$958341|$-1000000.00|1.35%     \n",
      "     836|        52|CASH SHORTAGE  |$961978|$-1000000.00|0.09%     \n",
      "     837|        50|CASH SHORTAGE  |$960788|$-1000000.00|0.13%     \n",
      "     838|        49|CASH SHORTAGE  |$926411|$-1000000.00|1.01%     \n",
      "     839|        50|CASH SHORTAGE  |$963840|$-1000000.00|1.61%     \n",
      "     840|        49|CASH SHORTAGE  |$926190|$-1000000.00|1.63%     \n",
      "     841|        49|CASH SHORTAGE  |$929553|$-1000000.00|0.66%     \n",
      "     842|        50|CASH SHORTAGE  |$959842|$-1000000.00|0.87%     \n",
      "     843|        51|CASH SHORTAGE  |$981753|$-1000000.00|0.49%     \n",
      "     844|        51|CASH SHORTAGE  |$976880|$-1000000.00|0.33%     \n",
      "     845|        51|CASH SHORTAGE  |$983472|$-1000000.00|1.88%     \n",
      "     846|        49|CASH SHORTAGE  |$927741|$-1000000.00|1.84%     \n",
      "     847|        50|CASH SHORTAGE  |$957975|$-1000000.00|1.91%     \n",
      "     848|        50|CASH SHORTAGE  |$957433|$-1000000.00|1.01%     \n",
      "     849|        50|CASH SHORTAGE  |$957195|$-1000000.00|2.00%     \n",
      "     850|        51|CASH SHORTAGE  |$976574|$-1000000.00|1.10%     \n",
      "     851|        51|CASH SHORTAGE  |$978635|$-1000000.00|1.18%     \n",
      "     852|        50|CASH SHORTAGE  |$960125|$-1000000.00|1.20%     \n",
      "     853|        49|CASH SHORTAGE  |$926983|$-1000000.00|2.32%     \n",
      "     854|        50|CASH SHORTAGE  |$954887|$-1000000.00|0.68%     \n",
      "     855|        50|CASH SHORTAGE  |$955206|$-1000000.00|2.60%     \n",
      "     856|        50|CASH SHORTAGE  |$954209|$-1000000.00|1.03%     \n",
      "     857|        50|CASH SHORTAGE  |$956693|$-1000000.00|0.33%     \n",
      "     858|        50|CASH SHORTAGE  |$956696|$-1000000.00|0.51%     \n",
      "     859|        50|CASH SHORTAGE  |$957053|$-1000000.00|2.19%     \n",
      "     860|        50|CASH SHORTAGE  |$958661|$-1000000.00|1.63%     \n",
      "     861|        51|CASH SHORTAGE  |$973130|$-1000000.00|0.94%     \n",
      "     862|        50|CASH SHORTAGE  |$952117|$-1000000.00|0.64%     \n",
      "     863|        49|CASH SHORTAGE  |$922427|$-1000000.00|1.51%     \n",
      "     864|        53|CASH SHORTAGE  |$929332|$-1000000.00|1.15%     \n",
      "     865|        53|CASH SHORTAGE  |$930971|$-1000000.00|0.75%     \n",
      "     866|        52|CASH SHORTAGE  |$956858|$-1000000.00|1.93%     \n",
      "     867|        54|CASH SHORTAGE  |$1006391|$-1000000.00|0.19%     \n",
      "     868|        54|CASH SHORTAGE  |$1010019|$-1000000.00|0.67%     \n",
      "     869|        54|CASH SHORTAGE  |$1008752|$-1000000.00|0.12%     \n",
      "     870|        52|CASH SHORTAGE  |$953942|$-1000000.00|0.59%     \n",
      "     871|        52|CASH SHORTAGE  |$954444|$-1000000.00|0.98%     \n",
      "     872|        53|CASH SHORTAGE  |$930396|$-1000000.00|0.40%     \n",
      "     873|        53|CASH SHORTAGE  |$927236|$-1000000.00|1.45%     \n",
      "     874|        52|CASH SHORTAGE  |$950607|$-1000000.00|1.62%     \n",
      "     875|        52|CASH SHORTAGE  |$951730|$-1000000.00|1.60%     \n",
      "     876|        51|CASH SHORTAGE  |$971168|$-1000000.00|1.96%     \n",
      "     877|        54|CASH SHORTAGE  |$1007946|$-1000000.00|0.19%     \n",
      "     878|        53|CASH SHORTAGE  |$930893|$-1000000.00|1.12%     \n",
      "     879|        54|CASH SHORTAGE  |$1005992|$-1000000.00|0.71%     \n",
      "     880|        53|CASH SHORTAGE  |$928451|$-1000000.00|1.44%     \n",
      "     881|        53|CASH SHORTAGE  |$929229|$-1000000.00|1.26%     \n",
      "     882|        54|CASH SHORTAGE  |$1004352|$-1000000.00|0.25%     \n",
      "     883|        53|CASH SHORTAGE  |$925515|$-1000000.00|1.96%     \n",
      "     884|        54|CASH SHORTAGE  |$1008215|$-1000000.00|0.08%     \n",
      "     885|        54|CASH SHORTAGE  |$1002597|$-1000000.00|0.73%     \n",
      "     886|        54|CASH SHORTAGE  |$1002670|$-1000000.00|0.43%     \n",
      "     887|        54|CASH SHORTAGE  |$1008056|$-1000000.00|1.49%     \n",
      "     888|        53|CASH SHORTAGE  |$926266|$-1000000.00|0.59%     \n",
      "     889|        53|CASH SHORTAGE  |$927243|$-1000000.00|1.76%     \n",
      "     890|        53|CASH SHORTAGE  |$925458|$-1000000.00|0.99%     \n",
      "     891|        53|CASH SHORTAGE  |$929196|$-1000000.00|0.53%     \n",
      "     892|        52|CASH SHORTAGE  |$950887|$-1000000.00|1.68%     \n",
      "     893|        54|CASH SHORTAGE  |$1005974|$-1000000.00|0.84%     \n",
      "     894|        52|CASH SHORTAGE  |$950952|$-1000000.00|1.75%     \n",
      "     895|        52|CASH SHORTAGE  |$952684|$-1000000.00|0.55%     \n",
      "     896|        54|CASH SHORTAGE  |$1006787|$-1000000.00|0.43%     \n",
      "     897|        53|CASH SHORTAGE  |$926908|$-1000000.00|0.01%     \n",
      "     898|        52|CASH SHORTAGE  |$953362|$-1000000.00|1.65%     \n",
      "     899|        53|CASH SHORTAGE  |$934713|$-1000000.00|0.16%     \n",
      "     900|        51|CASH SHORTAGE  |$966984|$-1000000.00|1.88%     \n",
      "     901|        52|CASH SHORTAGE  |$952623|$-1000000.00|1.41%     \n",
      "     902|        51|CASH SHORTAGE  |$968148|$-1000000.00|2.17%     \n",
      "     903|        52|CASH SHORTAGE  |$955828|$-1000000.00|1.53%     \n",
      "     904|        52|CASH SHORTAGE  |$954959|$-1000000.00|0.46%     \n",
      "     905|        52|CASH SHORTAGE  |$951714|$-1000000.00|1.19%     \n",
      "     906|        52|CASH SHORTAGE  |$955135|$-1000000.00|1.90%     \n",
      "     907|        51|CASH SHORTAGE  |$973366|$-1000000.00|1.61%     \n",
      "     908|        52|CASH SHORTAGE  |$955583|$-1000000.00|2.03%     \n",
      "     909|        52|CASH SHORTAGE  |$954537|$-1000000.00|2.04%     \n",
      "     910|        51|CASH SHORTAGE  |$970471|$-1000000.00|0.32%     \n",
      "     911|        52|CASH SHORTAGE  |$954400|$-1000000.00|0.76%     \n",
      "     912|        52|CASH SHORTAGE  |$953138|$-1000000.00|0.13%     \n",
      "     913|        52|CASH SHORTAGE  |$953114|$-1000000.00|2.16%     \n",
      "     914|        52|CASH SHORTAGE  |$952418|$-1000000.00|0.22%     \n",
      "     915|        52|CASH SHORTAGE  |$946954|$-1000000.00|1.74%     \n",
      "     916|        52|CASH SHORTAGE  |$950965|$-1000000.00|0.73%     \n",
      "     917|        52|CASH SHORTAGE  |$950175|$-1000000.00|0.58%     \n",
      "     918|        52|CASH SHORTAGE  |$947715|$-1000000.00|0.30%     \n",
      "     919|        53|CASH SHORTAGE  |$929598|$-1000000.00|1.80%     \n",
      "     920|        52|CASH SHORTAGE  |$953238|$-1000000.00|1.03%     \n",
      "     921|        52|CASH SHORTAGE  |$949751|$-1000000.00|0.12%     \n",
      "     922|        51|CASH SHORTAGE  |$968028|$-1000000.00|0.02%     \n",
      "     923|        51|CASH SHORTAGE  |$965795|$-1000000.00|1.42%     \n",
      "     924|        51|CASH SHORTAGE  |$967047|$-1000000.00|0.32%     \n",
      "     925|        51|CASH SHORTAGE  |$970163|$-1000000.00|1.05%     \n",
      "     926|        52|CASH SHORTAGE  |$954778|$-1000000.00|1.14%     \n",
      "     927|        52|CASH SHORTAGE  |$954564|$-1000000.00|1.52%     \n",
      "     928|        52|CASH SHORTAGE  |$956486|$-1000000.00|0.64%     \n",
      "     929|        52|CASH SHORTAGE  |$955729|$-1000000.00|0.50%     \n",
      "     930|        52|CASH SHORTAGE  |$954915|$-1000000.00|1.32%     \n",
      "     931|        50|CASH SHORTAGE  |$947651|$-1000000.00|0.57%     \n",
      "     932|        51|CASH SHORTAGE  |$967738|$-1000000.00|0.84%     \n",
      "     933|        50|CASH SHORTAGE  |$951971|$-1000000.00|1.59%     \n",
      "     934|        51|CASH SHORTAGE  |$972241|$-1000000.00|2.06%     \n",
      "     935|        51|CASH SHORTAGE  |$968819|$-1000000.00|1.61%     \n",
      "     936|        51|CASH SHORTAGE  |$969196|$-1000000.00|0.76%     \n",
      "     937|        51|CASH SHORTAGE  |$972684|$-1000000.00|0.83%     \n",
      "     938|        51|CASH SHORTAGE  |$973710|$-1000000.00|1.35%     \n",
      "     939|        51|CASH SHORTAGE  |$969735|$-1000000.00|1.37%     \n",
      "     940|        51|CASH SHORTAGE  |$968296|$-1000000.00|1.12%     \n",
      "     941|        49|CASH SHORTAGE  |$917149|$-1000000.00|1.46%     \n",
      "     942|        50|CASH SHORTAGE  |$949149|$-1000000.00|1.24%     \n",
      "     943|        48|CASH SHORTAGE  |$926571|$-1000000.00|1.86%     \n",
      "     944|        50|CASH SHORTAGE  |$949490|$-1000000.00|0.60%     \n",
      "     945|        50|CASH SHORTAGE  |$951888|$-1000000.00|0.94%     \n",
      "     946|        51|CASH SHORTAGE  |$966074|$-1000000.00|2.05%     \n",
      "     947|        50|CASH SHORTAGE  |$946741|$-1000000.00|0.61%     \n",
      "     948|        50|CASH SHORTAGE  |$946994|$-1000000.00|1.24%     \n",
      "     949|        51|CASH SHORTAGE  |$969505|$-1000000.00|0.92%     \n",
      "     950|        52|CASH SHORTAGE  |$952957|$-1000000.00|0.21%     \n",
      "     951|        52|CASH SHORTAGE  |$951276|$-1000000.00|1.23%     \n",
      "     952|        52|CASH SHORTAGE  |$947860|$-1000000.00|0.44%     \n",
      "     953|        53|CASH SHORTAGE  |$926293|$-1000000.00|0.51%     \n",
      "     954|        53|CASH SHORTAGE  |$922683|$-1000000.00|0.59%     \n",
      "     955|        51|CASH SHORTAGE  |$967635|$-1000000.00|1.07%     \n",
      "     956|        50|CASH SHORTAGE  |$951047|$-1000000.00|1.09%     \n",
      "     957|        49|CASH SHORTAGE  |$919345|$-1000000.00|1.86%     \n",
      "     958|        50|CASH SHORTAGE  |$953048|$-1000000.00|1.90%     \n",
      "     959|        50|CASH SHORTAGE  |$949861|$-1000000.00|0.81%     \n",
      "     960|        50|CASH SHORTAGE  |$946076|$-1000000.00|0.79%     \n",
      "     961|        48|CASH SHORTAGE  |$922914|$-1000000.00|1.04%     \n",
      "     962|        48|CASH SHORTAGE  |$921597|$-1000000.00|1.72%     \n",
      "     963|        49|CASH SHORTAGE  |$916614|$-1000000.00|1.64%     \n",
      "     964|        49|CASH SHORTAGE  |$912141|$-1000000.00|0.05%     \n",
      "     965|        48|CASH SHORTAGE  |$918146|$-1000000.00|2.07%     \n",
      "     966|        49|CASH SHORTAGE  |$918061|$-1000000.00|1.29%     \n",
      "     967|        48|CASH SHORTAGE  |$926031|$-1000000.00|1.98%     \n",
      "     968|        48|CASH SHORTAGE  |$924165|$-1000000.00|1.21%     \n",
      "     969|        49|CASH SHORTAGE  |$918126|$-1000000.00|0.82%     \n",
      "     970|        48|CASH SHORTAGE  |$922588|$-1000000.00|1.22%     \n",
      "     971|        49|CASH SHORTAGE  |$918353|$-1000000.00|0.94%     \n",
      "     972|        49|CASH SHORTAGE  |$920204|$-1000000.00|1.08%     \n",
      "     973|        49|CASH SHORTAGE  |$917636|$-1000000.00|0.28%     \n",
      "     974|        49|CASH SHORTAGE  |$918443|$-1000000.00|0.23%     \n",
      "     975|        48|CASH SHORTAGE  |$924892|$-1000000.00|1.34%     \n",
      "     976|        49|CASH SHORTAGE  |$920733|$-1000000.00|1.05%     \n",
      "     977|        49|CASH SHORTAGE  |$922783|$-1000000.00|2.01%     \n",
      "     978|        48|CASH SHORTAGE  |$924811|$-1000000.00|1.74%     \n",
      "     979|        48|CASH SHORTAGE  |$921557|$-1000000.00|0.12%     \n",
      "     980|        49|CASH SHORTAGE  |$919236|$-1000000.00|0.57%     \n",
      "     981|        49|CASH SHORTAGE  |$918812|$-1000000.00|0.17%     \n",
      "     982|        49|CASH SHORTAGE  |$923092|$-1000000.00|1.19%     \n",
      "     983|        50|CASH SHORTAGE  |$955876|$-1000000.00|1.25%     \n",
      "     984|        49|CASH SHORTAGE  |$921573|$-1000000.00|1.16%     \n",
      "     985|        49|CASH SHORTAGE  |$923752|$-1000000.00|1.89%     \n",
      "     986|        50|CASH SHORTAGE  |$954088|$-1000000.00|0.80%     \n",
      "     987|        49|CASH SHORTAGE  |$921468|$-1000000.00|1.30%     \n",
      "     988|        50|CASH SHORTAGE  |$952890|$-1000000.00|0.44%     \n",
      "     989|        49|CASH SHORTAGE  |$922835|$-1000000.00|0.85%     \n",
      "     990|        49|CASH SHORTAGE  |$921869|$-1000000.00|1.91%     \n",
      "     991|        49|CASH SHORTAGE  |$920704|$-1000000.00|0.67%     \n",
      "     992|        49|CASH SHORTAGE  |$921947|$-1000000.00|0.55%     \n",
      "     993|        49|CASH SHORTAGE  |$920316|$-1000000.00|0.87%     \n",
      "     994|        49|CASH SHORTAGE  |$919425|$-1000000.00|0.99%     \n",
      "     995|        49|CASH SHORTAGE  |$923531|$-1000000.00|1.78%     \n",
      "     996|        49|CASH SHORTAGE  |$917252|$-1000000.00|0.32%     \n",
      "     997|        49|CASH SHORTAGE  |$922886|$-1000000.00|1.85%     \n",
      "     998|        48|CASH SHORTAGE  |$925352|$-1000000.00|1.83%     \n",
      "     999|        50|CASH SHORTAGE  |$954508|$-1000000.00|0.08%     \n",
      "    1000|        49|CASH SHORTAGE  |$919055|$-1000000.00|2.16%     \n",
      "    1001|        48|CASH SHORTAGE  |$925996|$-1000000.00|1.95%     \n",
      "    1002|        49|CASH SHORTAGE  |$922567|$-1000000.00|1.62%     \n",
      "    1003|        50|CASH SHORTAGE  |$956053|$-1000000.00|0.58%     \n",
      "    1004|        50|CASH SHORTAGE  |$957599|$-1000000.00|0.36%     \n",
      "    1005|        50|CASH SHORTAGE  |$954899|$-1000000.00|0.01%     \n",
      "    1006|        49|CASH SHORTAGE  |$922763|$-1000000.00|1.88%     \n",
      "    1007|        50|CASH SHORTAGE  |$950394|$-1000000.00|0.22%     \n",
      "    1008|        50|CASH SHORTAGE  |$954366|$-1000000.00|0.47%     \n",
      "    1009|        49|CASH SHORTAGE  |$920555|$-1000000.00|2.14%     \n",
      "    1010|        49|CASH SHORTAGE  |$920007|$-1000000.00|1.98%     \n",
      "    1011|        50|CASH SHORTAGE  |$955214|$-1000000.00|1.87%     \n",
      "    1012|        51|CASH SHORTAGE  |$972469|$-1000000.00|0.08%     \n",
      "    1013|        50|CASH SHORTAGE  |$952557|$-1000000.00|0.90%     \n",
      "    1014|        50|CASH SHORTAGE  |$951497|$-1000000.00|0.93%     \n",
      "    1015|        50|CASH SHORTAGE  |$955261|$-1000000.00|0.93%     \n",
      "    1016|        49|CASH SHORTAGE  |$923964|$-1000000.00|2.20%     \n",
      "    1017|        50|CASH SHORTAGE  |$955692|$-1000000.00|1.01%     \n",
      "    1018|        50|CASH SHORTAGE  |$956161|$-1000000.00|1.33%     \n",
      "    1019|        50|CASH SHORTAGE  |$954184|$-1000000.00|0.35%     \n",
      "    1020|        50|CASH SHORTAGE  |$955077|$-1000000.00|1.97%     \n",
      "    1021|        50|CASH SHORTAGE  |$957264|$-1000000.00|0.62%     \n",
      "    1022|        51|CASH SHORTAGE  |$972711|$-1000000.00|0.68%     \n",
      "    1023|        51|CASH SHORTAGE  |$975190|$-1000000.00|0.23%     \n",
      "    1024|        50|CASH SHORTAGE  |$956480|$-1000000.00|1.15%     \n",
      "    1025|        50|CASH SHORTAGE  |$951617|$-1000000.00|0.64%     \n",
      "    1026|        50|CASH SHORTAGE  |$955162|$-1000000.00|0.78%     \n",
      "    1027|        50|CASH SHORTAGE  |$958471|$-1000000.00|1.59%     \n",
      "    1028|        50|CASH SHORTAGE  |$951663|$-1000000.00|1.26%     \n",
      "    1029|        50|CASH SHORTAGE  |$952449|$-1000000.00|0.76%     \n",
      "    1030|        49|CASH SHORTAGE  |$919129|$-1000000.00|0.36%     \n",
      "    1031|        50|CASH SHORTAGE  |$952142|$-1000000.00|0.55%     \n",
      "    1032|        50|CASH SHORTAGE  |$952132|$-1000000.00|1.03%     \n",
      "    1033|        50|CASH SHORTAGE  |$951015|$-1000000.00|1.24%     \n",
      "    1034|        49|CASH SHORTAGE  |$916568|$-1000000.00|2.11%     \n",
      "    1035|        49|CASH SHORTAGE  |$918111|$-1000000.00|1.65%     \n",
      "    1036|        50|CASH SHORTAGE  |$951028|$-1000000.00|1.44%     \n",
      "    1037|        50|CASH SHORTAGE  |$948805|$-1000000.00|1.03%     \n",
      "    1038|        50|CASH SHORTAGE  |$950985|$-1000000.00|0.46%     \n",
      "    1039|        50|CASH SHORTAGE  |$948717|$-1000000.00|1.83%     \n",
      "    1040|        50|CASH SHORTAGE  |$953005|$-1000000.00|0.31%     \n",
      "    1041|        49|CASH SHORTAGE  |$917732|$-1000000.00|0.49%     \n",
      "    1042|        49|CASH SHORTAGE  |$922318|$-1000000.00|1.78%     \n",
      "    1043|        49|CASH SHORTAGE  |$921594|$-1000000.00|2.12%     \n",
      "    1044|        49|CASH SHORTAGE  |$919830|$-1000000.00|2.05%     \n",
      "    1045|        50|CASH SHORTAGE  |$954698|$-1000000.00|0.75%     \n",
      "    1046|        49|CASH SHORTAGE  |$919865|$-1000000.00|0.66%     \n",
      "    1047|        50|CASH SHORTAGE  |$953182|$-1000000.00|0.37%     \n",
      "    1048|        50|CASH SHORTAGE  |$952124|$-1000000.00|1.16%     \n",
      "    1049|        50|CASH SHORTAGE  |$955131|$-1000000.00|0.26%     \n",
      "    1050|        50|CASH SHORTAGE  |$954321|$-1000000.00|0.77%     \n",
      "    1051|        49|CASH SHORTAGE  |$921452|$-1000000.00|1.37%     \n",
      "    1052|        50|CASH SHORTAGE  |$954165|$-1000000.00|0.91%     \n",
      "    1053|        50|CASH SHORTAGE  |$952123|$-1000000.00|0.81%     \n",
      "    1054|        50|CASH SHORTAGE  |$953177|$-1000000.00|1.41%     \n",
      "    1055|        49|CASH SHORTAGE  |$920239|$-1000000.00|1.16%     \n",
      "    1056|        49|CASH SHORTAGE  |$921941|$-1000000.00|2.04%     \n",
      "    1057|        49|CASH SHORTAGE  |$922922|$-1000000.00|0.35%     \n",
      "    1058|        49|CASH SHORTAGE  |$922413|$-1000000.00|0.97%     \n",
      "    1059|        50|CASH SHORTAGE  |$956236|$-1000000.00|0.51%     \n",
      "    1060|        49|CASH SHORTAGE  |$921474|$-1000000.00|0.99%     \n",
      "    1061|        48|CASH SHORTAGE  |$929401|$-1000000.00|2.23%     \n",
      "    1062|        50|CASH SHORTAGE  |$953048|$-1000000.00|0.45%     \n",
      "    1063|        49|CASH SHORTAGE  |$920057|$-1000000.00|1.60%     \n",
      "    1064|        49|CASH SHORTAGE  |$920787|$-1000000.00|2.06%     \n",
      "    1065|        50|CASH SHORTAGE  |$954275|$-1000000.00|0.72%     \n",
      "    1066|        49|CASH SHORTAGE  |$921312|$-1000000.00|1.97%     \n",
      "    1067|        50|CASH SHORTAGE  |$955827|$-1000000.00|0.82%     \n",
      "    1068|        50|CASH SHORTAGE  |$950918|$-1000000.00|0.31%     \n",
      "    1069|        49|CASH SHORTAGE  |$919638|$-1000000.00|1.91%     \n",
      "    1070|        49|CASH SHORTAGE  |$921219|$-1000000.00|2.18%     \n",
      "    1071|        49|CASH SHORTAGE  |$920495|$-1000000.00|1.76%     \n",
      "    1072|        50|CASH SHORTAGE  |$954735|$-1000000.00|0.53%     \n",
      "    1073|        49|CASH SHORTAGE  |$918836|$-1000000.00|1.54%     \n",
      "    1074|        49|CASH SHORTAGE  |$918510|$-1000000.00|1.79%     \n",
      "    1075|        49|CASH SHORTAGE  |$916837|$-1000000.00|0.26%     \n",
      "    1076|        49|CASH SHORTAGE  |$919165|$-1000000.00|1.12%     \n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "ignored",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-26-446cbcdd7ddf>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m model.learn(total_timesteps = 400000, \n\u001b[1;32m      2\u001b[0m             \u001b[0mlog_interval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtb_log_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'ppo_1024_5_more_ooc_penalty'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m             reset_num_timesteps = True)\n\u001b[0m",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/stable_baselines3/ppo/ppo.py\u001b[0m in \u001b[0;36mlearn\u001b[0;34m(self, total_timesteps, callback, log_interval, eval_env, eval_freq, n_eval_episodes, tb_log_name, eval_log_path, reset_num_timesteps)\u001b[0m\n\u001b[1;32m    306\u001b[0m             \u001b[0mtb_log_name\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtb_log_name\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    307\u001b[0m             \u001b[0meval_log_path\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0meval_log_path\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 308\u001b[0;31m             \u001b[0mreset_num_timesteps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreset_num_timesteps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    309\u001b[0m         )\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/stable_baselines3/common/on_policy_algorithm.py\u001b[0m in \u001b[0;36mlearn\u001b[0;34m(self, total_timesteps, callback, log_interval, eval_env, eval_freq, n_eval_episodes, tb_log_name, eval_log_path, reset_num_timesteps)\u001b[0m\n\u001b[1;32m    232\u001b[0m         \u001b[0;32mwhile\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_timesteps\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mtotal_timesteps\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 234\u001b[0;31m             \u001b[0mcontinue_training\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect_rollouts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrollout_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_rollout_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_steps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    235\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    236\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mcontinue_training\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/stable_baselines3/common/on_policy_algorithm.py\u001b[0m in \u001b[0;36mcollect_rollouts\u001b[0;34m(self, env, callback, rollout_buffer, n_rollout_steps)\u001b[0m\n\u001b[1;32m    173\u001b[0m                 \u001b[0mclipped_actions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maction_space\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maction_space\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhigh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 175\u001b[0;31m             \u001b[0mnew_obs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrewards\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdones\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minfos\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclipped_actions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    176\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    177\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_timesteps\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_envs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/stable_baselines3/common/vec_env/base_vec_env.py\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, actions)\u001b[0m\n\u001b[1;32m    160\u001b[0m         \"\"\"\n\u001b[1;32m    161\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep_async\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 162\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep_wait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    163\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    164\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mget_images\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSequence\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/stable_baselines3/common/vec_env/dummy_vec_env.py\u001b[0m in \u001b[0;36mstep_wait\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     42\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0menv_idx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_envs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     43\u001b[0m             obs, self.buf_rews[env_idx], self.buf_dones[env_idx], self.buf_infos[env_idx] = self.envs[env_idx].step(\n\u001b[0;32m---> 44\u001b[0;31m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mactions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0menv_idx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     45\u001b[0m             )\n\u001b[1;32m     46\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuf_dones\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0menv_idx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-18-e5c5bff3b9d3>\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, actions)\u001b[0m\n\u001b[1;32m    183\u001b[0m             \u001b[0mholdings\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate_memory\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massets\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    184\u001b[0m             \u001b[0;32massert\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mholdings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m>=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m             \u001b[0mclosings\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_date_vector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdate_index\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcols\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"close\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    187\u001b[0m             \u001b[0;31m# compute current value of holdings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-18-e5c5bff3b9d3>\u001b[0m in \u001b[0;36mget_date_vector\u001b[0;34m(self, date, cols)\u001b[0m\n\u001b[1;32m    134\u001b[0m             \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massets\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    135\u001b[0m                 \u001b[0msubset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrunc_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtrunc_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstock_col\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 136\u001b[0;31m                 \u001b[0mv\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0msubset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcols\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    137\u001b[0m             \u001b[0;32massert\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massets\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcols\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    138\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m    871\u001b[0m                     \u001b[0;31m# AttributeError for IntervalTree get_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    872\u001b[0m                     \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 873\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    874\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    875\u001b[0m             \u001b[0;31m# we by definition only have the 0th axis\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_tuple\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m   1042\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1043\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1044\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_lowerdim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1045\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mIndexingError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1046\u001b[0m             \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_lowerdim\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m    808\u001b[0m                     \u001b[0;32mreturn\u001b[0m \u001b[0msection\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    809\u001b[0m                 \u001b[0;31m# This is an elided recursive call to iloc/loc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msection\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnew_key\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    811\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    812\u001b[0m         \u001b[0;32mraise\u001b[0m \u001b[0mIndexingError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"not applicable\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m    877\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    878\u001b[0m             \u001b[0mmaybe_callable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 879\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmaybe_callable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    880\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    881\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m   1097\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Cannot index with multidimensional key\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1098\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1099\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_iterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1101\u001b[0m             \u001b[0;31m# nested tuple slicing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_iterable\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m   1037\u001b[0m         \u001b[0mkeyarr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_listlike_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1038\u001b[0m         return self.obj._reindex_with_indexers(\n\u001b[0;32m-> 1039\u001b[0;31m             \u001b[0;34m{\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mkeyarr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_dups\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1040\u001b[0m         )\n\u001b[1;32m   1041\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_reindex_with_indexers\u001b[0;34m(self, reindexers, fill_value, copy, allow_dups)\u001b[0m\n\u001b[1;32m   4530\u001b[0m                 \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4531\u001b[0m                 \u001b[0mallow_dups\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_dups\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4532\u001b[0;31m                 \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4533\u001b[0m             )\n\u001b[1;32m   4534\u001b[0m             \u001b[0;31m# If we've made a copy once, no need to make another one\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mreindex_indexer\u001b[0;34m(self, new_axis, indexer, axis, fill_value, allow_dups, copy, consolidate)\u001b[0m\n\u001b[1;32m   1289\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1290\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1291\u001b[0;31m             \u001b[0mnew_blocks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slice_take_blocks_ax0\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1292\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1293\u001b[0m             new_blocks = [\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36m_slice_take_blocks_ax0\u001b[0;34m(self, slice_or_indexer, fill_value, only_slice)\u001b[0m\n\u001b[1;32m   1360\u001b[0m                             \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1361\u001b[0m                             \u001b[0mnew_mgr_locs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msllen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1362\u001b[0;31m                             \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1363\u001b[0m                         )\n\u001b[1;32m   1364\u001b[0m                     ]\n",
      "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/internals/blocks.py\u001b[0m in \u001b[0;36mtake_nd\u001b[0;34m(self, indexer, axis, new_mgr_locs, fill_value)\u001b[0m\n\u001b[1;32m   1236\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_downcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mblocks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdowncast\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1237\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1238\u001b[0;31m     \u001b[0;32mdef\u001b[0m \u001b[0mtake_nd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_mgr_locs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mno_default\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1239\u001b[0m         \"\"\"\n\u001b[1;32m   1240\u001b[0m         \u001b[0mTake\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0maccording\u001b[0m \u001b[0mto\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mthem\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0ma\u001b[0m \u001b[0mblock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "model.learn(total_timesteps = 400000, \n",
    "            log_interval = 1, tb_log_name = 'ppo_1024_5_more_ooc_penalty',\n",
    "            reset_num_timesteps = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "F143_mQW7W8I",
    "outputId": "695fb886-9c82-46f6-ef80-6101e703f544"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[array([  57.24479 , -100.      ,  100.      ,  100.      ,  100.      ,\n",
      "       -100.      ,  100.      , -100.      , -100.      , -100.      ,\n",
      "       -100.      , -100.      , -100.      ,  100.      ,  100.      ,\n",
      "        100.      ,   13.516927, -100.      ,  100.      , -100.      ,\n",
      "        100.      , -100.      , -100.      , -100.      , -100.      ,\n",
      "        100.      , -100.      , -100.      , -100.      ,  -12.321627],\n",
      "      dtype=float32), array([ 100.      , -100.      ,  100.      ,  100.      ,  100.      ,\n",
      "       -100.      ,  -35.733818, -100.      , -100.      , -100.      ,\n",
      "       -100.      , -100.      , -100.      ,  100.      ,  100.      ,\n",
      "        100.      ,  -59.700596, -100.      ,  100.      , -100.      ,\n",
      "        100.      , -100.      , -100.      , -100.      , -100.      ,\n",
      "        100.      , -100.      , -100.      , -100.      ,  -94.28854 ],\n",
      "      dtype=float32)]\n"
     ]
    }
   ],
   "source": [
    "print(e_train_gym.actions_memory[:2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "id": "xkriHOXa7W8J"
   },
   "outputs": [],
   "source": [
    "model.save(\"quicksave_ppo_dow.model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "id": "efwBi84ch1jE"
   },
   "outputs": [],
   "source": [
    "data_turbulence = processed[(processed.date<'2019-01-01') & (processed.date>='2009-01-01')]\n",
    "insample_turbulence = data_turbulence.drop_duplicates(subset=['date'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "VHZMBpSqh1jG",
    "outputId": "33f19973-75eb-4d74-b6c7-7084bfd6c5f9"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    2516.000000\n",
       "mean       33.278198\n",
       "std        33.999913\n",
       "min         0.000000\n",
       "25%        15.233727\n",
       "50%        25.167140\n",
       "75%        39.290099\n",
       "max       332.848688\n",
       "Name: turbulence, dtype: float64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "insample_turbulence.turbulence.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "id": "yuwDPkV9h1jL"
   },
   "outputs": [],
   "source": [
    "turbulence_threshold = np.quantile(insample_turbulence.turbulence.values,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "wwoz_7VSh1jO",
    "outputId": "770adce1-c05f-49ef-8d89-c7b760c72b4b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "332.848687837269"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "turbulence_threshold"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "U5mmgQF_h1jQ"
   },
   "source": [
    "### Trade\n",
    "\n",
    "DRL model needs to update periodically in order to take full advantage of the data, ideally we need to retrain our model yearly, quarterly, or monthly. We also need to tune the parameters along the way, in this notebook I only use the in-sample data from 2009-01 to 2018-12 to tune the parameters once, so there is some alpha decay here as the length of trade date extends. \n",
    "\n",
    "Numerous hyperparameters – e.g. the learning rate, the total number of samples to train on – influence the learning process and are usually determined by testing some variations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "eLOnL5eYh1jR",
    "outputId": "2858d6d3-d708-47b9-bd46-15dda8142b79"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "caching data\n",
      "data cached!\n",
      "EPISODE |STEPS     |TERMINAL_REASON|TOT_ASSETS|TERMINAL_REWARD_unsc|CASH_PCT  \n",
      "       1|        70|CASH SHORTAGE  |$1047447|$-500000.00|1.10%     \n",
      "hit end!\n"
     ]
    }
   ],
   "source": [
    "def DRL_prediction(model, environment):\n",
    "    test_env, test_obs = environment.get_sb_env()\n",
    "    \"\"\"make a prediction\"\"\"\n",
    "    account_memory = []\n",
    "    actions_memory = []\n",
    "    test_env.reset()\n",
    "    for i in range(len(environment.df.index.unique())):\n",
    "        action, _states = model.predict(test_obs)\n",
    "        #account_memory = test_env.env_method(method_name=\"save_asset_memory\")\n",
    "        #actions_memory = test_env.env_method(method_name=\"save_action_memory\")\n",
    "        test_obs, rewards, dones, info = test_env.step(action)\n",
    "        if not dones[0]:\n",
    "          account_memory = test_env.env_method(method_name=\"save_asset_memory\")\n",
    "          actions_memory = test_env.env_method(method_name=\"save_action_memory\")\n",
    "        if dones[0]:\n",
    "            print(\"hit end!\")\n",
    "            break\n",
    "    return account_memory[0], actions_memory[0]\n",
    "\n",
    "trade = data_split(processed, '2019-01-01','2021-01-01')\n",
    "e_trade_gym = StockTradingEnvV2(df = trade,hmax = 10, \n",
    "                              daily_information_cols = information_cols,\n",
    "                              print_verbosity = 500)\n",
    "\n",
    "df_account_value, df_actions = DRL_prediction(model=model,\n",
    "                        environment = e_trade_gym,)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ERxw3KqLkcP4",
    "outputId": "498919e3-52ea-4efc-d1f4-f8af351c271c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(70, 5)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_account_value.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "2yRkNguY5yvp",
    "outputId": "34beda57-b0b7-44eb-ee16-d8a985392509"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cash</th>\n",
       "      <th>asset_value</th>\n",
       "      <th>total_assets</th>\n",
       "      <th>reward</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1000000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2019-01-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>986726.110695</td>\n",
       "      <td>12798.211555</td>\n",
       "      <td>9.995243e+05</td>\n",
       "      <td>-475.677749</td>\n",
       "      <td>2019-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>975740.083429</td>\n",
       "      <td>24734.168788</td>\n",
       "      <td>1.000474e+06</td>\n",
       "      <td>949.929967</td>\n",
       "      <td>2019-01-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>964679.096580</td>\n",
       "      <td>35921.390292</td>\n",
       "      <td>1.000600e+06</td>\n",
       "      <td>126.234654</td>\n",
       "      <td>2019-01-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>951179.217837</td>\n",
       "      <td>50096.544719</td>\n",
       "      <td>1.001276e+06</td>\n",
       "      <td>675.275683</td>\n",
       "      <td>2019-01-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>939967.490681</td>\n",
       "      <td>61593.083405</td>\n",
       "      <td>1.001561e+06</td>\n",
       "      <td>284.811530</td>\n",
       "      <td>2019-01-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>927702.269199</td>\n",
       "      <td>74519.560311</td>\n",
       "      <td>1.002222e+06</td>\n",
       "      <td>661.255425</td>\n",
       "      <td>2019-01-10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>912789.606437</td>\n",
       "      <td>89263.760139</td>\n",
       "      <td>1.002053e+06</td>\n",
       "      <td>-168.462934</td>\n",
       "      <td>2019-01-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>900332.337488</td>\n",
       "      <td>101205.856776</td>\n",
       "      <td>1.001538e+06</td>\n",
       "      <td>-515.172312</td>\n",
       "      <td>2019-01-14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>886292.849374</td>\n",
       "      <td>115638.943098</td>\n",
       "      <td>1.001932e+06</td>\n",
       "      <td>393.598208</td>\n",
       "      <td>2019-01-15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>873702.020798</td>\n",
       "      <td>128194.935968</td>\n",
       "      <td>1.001897e+06</td>\n",
       "      <td>-34.835706</td>\n",
       "      <td>2019-01-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>860642.037463</td>\n",
       "      <td>142990.528929</td>\n",
       "      <td>1.003633e+06</td>\n",
       "      <td>1735.609625</td>\n",
       "      <td>2019-01-17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>849720.607114</td>\n",
       "      <td>156102.704507</td>\n",
       "      <td>1.005823e+06</td>\n",
       "      <td>2190.745229</td>\n",
       "      <td>2019-01-18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>835594.777351</td>\n",
       "      <td>167853.971297</td>\n",
       "      <td>1.003449e+06</td>\n",
       "      <td>-2374.562972</td>\n",
       "      <td>2019-01-22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>821092.219584</td>\n",
       "      <td>182758.100063</td>\n",
       "      <td>1.003850e+06</td>\n",
       "      <td>401.570998</td>\n",
       "      <td>2019-01-23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>807188.600538</td>\n",
       "      <td>196645.443792</td>\n",
       "      <td>1.003834e+06</td>\n",
       "      <td>-16.275317</td>\n",
       "      <td>2019-01-24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>794606.820494</td>\n",
       "      <td>211354.347190</td>\n",
       "      <td>1.005961e+06</td>\n",
       "      <td>2127.123353</td>\n",
       "      <td>2019-01-25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>780272.924992</td>\n",
       "      <td>222206.553781</td>\n",
       "      <td>1.002479e+06</td>\n",
       "      <td>-3481.688910</td>\n",
       "      <td>2019-01-28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>766492.784287</td>\n",
       "      <td>236621.459457</td>\n",
       "      <td>1.003114e+06</td>\n",
       "      <td>634.764970</td>\n",
       "      <td>2019-01-29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>752337.565019</td>\n",
       "      <td>257856.849732</td>\n",
       "      <td>1.010194e+06</td>\n",
       "      <td>7080.171007</td>\n",
       "      <td>2019-01-30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>739638.692017</td>\n",
       "      <td>268225.725323</td>\n",
       "      <td>1.007864e+06</td>\n",
       "      <td>-2329.997410</td>\n",
       "      <td>2019-01-31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>725212.045400</td>\n",
       "      <td>282837.554703</td>\n",
       "      <td>1.008050e+06</td>\n",
       "      <td>185.182762</td>\n",
       "      <td>2019-02-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>711193.371693</td>\n",
       "      <td>300309.736770</td>\n",
       "      <td>1.011503e+06</td>\n",
       "      <td>3453.508361</td>\n",
       "      <td>2019-02-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>696799.459817</td>\n",
       "      <td>318837.854361</td>\n",
       "      <td>1.015637e+06</td>\n",
       "      <td>4134.205715</td>\n",
       "      <td>2019-02-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>682163.170594</td>\n",
       "      <td>332483.858328</td>\n",
       "      <td>1.014647e+06</td>\n",
       "      <td>-990.285256</td>\n",
       "      <td>2019-02-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>666282.605840</td>\n",
       "      <td>344681.384192</td>\n",
       "      <td>1.010964e+06</td>\n",
       "      <td>-3683.038890</td>\n",
       "      <td>2019-02-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>653271.956038</td>\n",
       "      <td>357417.171801</td>\n",
       "      <td>1.010689e+06</td>\n",
       "      <td>-274.862194</td>\n",
       "      <td>2019-02-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>637372.543053</td>\n",
       "      <td>373076.257619</td>\n",
       "      <td>1.010449e+06</td>\n",
       "      <td>-240.327166</td>\n",
       "      <td>2019-02-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>624486.303364</td>\n",
       "      <td>391703.087286</td>\n",
       "      <td>1.016189e+06</td>\n",
       "      <td>5740.589978</td>\n",
       "      <td>2019-02-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>609888.842909</td>\n",
       "      <td>407306.862280</td>\n",
       "      <td>1.017196e+06</td>\n",
       "      <td>1006.314540</td>\n",
       "      <td>2019-02-13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>594929.449405</td>\n",
       "      <td>420460.192347</td>\n",
       "      <td>1.015390e+06</td>\n",
       "      <td>-1806.063438</td>\n",
       "      <td>2019-02-14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>580810.897778</td>\n",
       "      <td>442851.838666</td>\n",
       "      <td>1.023663e+06</td>\n",
       "      <td>8273.094692</td>\n",
       "      <td>2019-02-15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>565958.139763</td>\n",
       "      <td>456597.067217</td>\n",
       "      <td>1.022555e+06</td>\n",
       "      <td>-1107.529463</td>\n",
       "      <td>2019-02-19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>551139.431193</td>\n",
       "      <td>475705.363423</td>\n",
       "      <td>1.026845e+06</td>\n",
       "      <td>4289.587635</td>\n",
       "      <td>2019-02-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>535061.307714</td>\n",
       "      <td>490603.606113</td>\n",
       "      <td>1.025665e+06</td>\n",
       "      <td>-1179.880788</td>\n",
       "      <td>2019-02-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>520522.238499</td>\n",
       "      <td>509083.807430</td>\n",
       "      <td>1.029606e+06</td>\n",
       "      <td>3941.132101</td>\n",
       "      <td>2019-02-22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>506241.495170</td>\n",
       "      <td>526795.393422</td>\n",
       "      <td>1.033037e+06</td>\n",
       "      <td>3430.842664</td>\n",
       "      <td>2019-02-25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>492482.887707</td>\n",
       "      <td>539443.144597</td>\n",
       "      <td>1.031926e+06</td>\n",
       "      <td>-1110.856288</td>\n",
       "      <td>2019-02-26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>477380.033810</td>\n",
       "      <td>558043.992625</td>\n",
       "      <td>1.035424e+06</td>\n",
       "      <td>3497.994131</td>\n",
       "      <td>2019-02-27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>462232.981319</td>\n",
       "      <td>573589.431788</td>\n",
       "      <td>1.035822e+06</td>\n",
       "      <td>398.386672</td>\n",
       "      <td>2019-02-28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>447028.895297</td>\n",
       "      <td>590375.583405</td>\n",
       "      <td>1.037404e+06</td>\n",
       "      <td>1582.065595</td>\n",
       "      <td>2019-03-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>431803.772087</td>\n",
       "      <td>600483.457024</td>\n",
       "      <td>1.032287e+06</td>\n",
       "      <td>-5117.249591</td>\n",
       "      <td>2019-03-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>416682.814801</td>\n",
       "      <td>612710.384316</td>\n",
       "      <td>1.029393e+06</td>\n",
       "      <td>-2894.029993</td>\n",
       "      <td>2019-03-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>400641.636449</td>\n",
       "      <td>625190.560319</td>\n",
       "      <td>1.025832e+06</td>\n",
       "      <td>-3561.002349</td>\n",
       "      <td>2019-03-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>386449.913875</td>\n",
       "      <td>634179.964382</td>\n",
       "      <td>1.020630e+06</td>\n",
       "      <td>-5202.318511</td>\n",
       "      <td>2019-03-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>373834.264567</td>\n",
       "      <td>646012.514344</td>\n",
       "      <td>1.019847e+06</td>\n",
       "      <td>-783.099346</td>\n",
       "      <td>2019-03-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>360776.808197</td>\n",
       "      <td>657885.929385</td>\n",
       "      <td>1.018663e+06</td>\n",
       "      <td>-1184.041330</td>\n",
       "      <td>2019-03-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>345213.430666</td>\n",
       "      <td>662714.547159</td>\n",
       "      <td>1.007928e+06</td>\n",
       "      <td>-10734.759756</td>\n",
       "      <td>2019-03-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>331165.345699</td>\n",
       "      <td>679989.757947</td>\n",
       "      <td>1.011155e+06</td>\n",
       "      <td>3227.125821</td>\n",
       "      <td>2019-03-13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>315697.084356</td>\n",
       "      <td>694830.359115</td>\n",
       "      <td>1.010527e+06</td>\n",
       "      <td>-627.660175</td>\n",
       "      <td>2019-03-14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              cash    asset_value  total_assets        reward        date\n",
       "0   1000000.000000       0.000000  1.000000e+06      0.000000  2019-01-02\n",
       "1    986726.110695   12798.211555  9.995243e+05   -475.677749  2019-01-03\n",
       "2    975740.083429   24734.168788  1.000474e+06    949.929967  2019-01-04\n",
       "3    964679.096580   35921.390292  1.000600e+06    126.234654  2019-01-07\n",
       "4    951179.217837   50096.544719  1.001276e+06    675.275683  2019-01-08\n",
       "5    939967.490681   61593.083405  1.001561e+06    284.811530  2019-01-09\n",
       "6    927702.269199   74519.560311  1.002222e+06    661.255425  2019-01-10\n",
       "7    912789.606437   89263.760139  1.002053e+06   -168.462934  2019-01-11\n",
       "8    900332.337488  101205.856776  1.001538e+06   -515.172312  2019-01-14\n",
       "9    886292.849374  115638.943098  1.001932e+06    393.598208  2019-01-15\n",
       "10   873702.020798  128194.935968  1.001897e+06    -34.835706  2019-01-16\n",
       "11   860642.037463  142990.528929  1.003633e+06   1735.609625  2019-01-17\n",
       "12   849720.607114  156102.704507  1.005823e+06   2190.745229  2019-01-18\n",
       "13   835594.777351  167853.971297  1.003449e+06  -2374.562972  2019-01-22\n",
       "14   821092.219584  182758.100063  1.003850e+06    401.570998  2019-01-23\n",
       "15   807188.600538  196645.443792  1.003834e+06    -16.275317  2019-01-24\n",
       "16   794606.820494  211354.347190  1.005961e+06   2127.123353  2019-01-25\n",
       "17   780272.924992  222206.553781  1.002479e+06  -3481.688910  2019-01-28\n",
       "18   766492.784287  236621.459457  1.003114e+06    634.764970  2019-01-29\n",
       "19   752337.565019  257856.849732  1.010194e+06   7080.171007  2019-01-30\n",
       "20   739638.692017  268225.725323  1.007864e+06  -2329.997410  2019-01-31\n",
       "21   725212.045400  282837.554703  1.008050e+06    185.182762  2019-02-01\n",
       "22   711193.371693  300309.736770  1.011503e+06   3453.508361  2019-02-04\n",
       "23   696799.459817  318837.854361  1.015637e+06   4134.205715  2019-02-05\n",
       "24   682163.170594  332483.858328  1.014647e+06   -990.285256  2019-02-06\n",
       "25   666282.605840  344681.384192  1.010964e+06  -3683.038890  2019-02-07\n",
       "26   653271.956038  357417.171801  1.010689e+06   -274.862194  2019-02-08\n",
       "27   637372.543053  373076.257619  1.010449e+06   -240.327166  2019-02-11\n",
       "28   624486.303364  391703.087286  1.016189e+06   5740.589978  2019-02-12\n",
       "29   609888.842909  407306.862280  1.017196e+06   1006.314540  2019-02-13\n",
       "30   594929.449405  420460.192347  1.015390e+06  -1806.063438  2019-02-14\n",
       "31   580810.897778  442851.838666  1.023663e+06   8273.094692  2019-02-15\n",
       "32   565958.139763  456597.067217  1.022555e+06  -1107.529463  2019-02-19\n",
       "33   551139.431193  475705.363423  1.026845e+06   4289.587635  2019-02-20\n",
       "34   535061.307714  490603.606113  1.025665e+06  -1179.880788  2019-02-21\n",
       "35   520522.238499  509083.807430  1.029606e+06   3941.132101  2019-02-22\n",
       "36   506241.495170  526795.393422  1.033037e+06   3430.842664  2019-02-25\n",
       "37   492482.887707  539443.144597  1.031926e+06  -1110.856288  2019-02-26\n",
       "38   477380.033810  558043.992625  1.035424e+06   3497.994131  2019-02-27\n",
       "39   462232.981319  573589.431788  1.035822e+06    398.386672  2019-02-28\n",
       "40   447028.895297  590375.583405  1.037404e+06   1582.065595  2019-03-01\n",
       "41   431803.772087  600483.457024  1.032287e+06  -5117.249591  2019-03-04\n",
       "42   416682.814801  612710.384316  1.029393e+06  -2894.029993  2019-03-05\n",
       "43   400641.636449  625190.560319  1.025832e+06  -3561.002349  2019-03-06\n",
       "44   386449.913875  634179.964382  1.020630e+06  -5202.318511  2019-03-07\n",
       "45   373834.264567  646012.514344  1.019847e+06   -783.099346  2019-03-08\n",
       "46   360776.808197  657885.929385  1.018663e+06  -1184.041330  2019-03-11\n",
       "47   345213.430666  662714.547159  1.007928e+06 -10734.759756  2019-03-12\n",
       "48   331165.345699  679989.757947  1.011155e+06   3227.125821  2019-03-13\n",
       "49   315697.084356  694830.359115  1.010527e+06   -627.660175  2019-03-14"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_account_value.head(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "nFlK5hNbWVFk",
    "outputId": "2d84a4d6-2713-4e63-fc50-b41285ae5a6a"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py:1490: FutureWarning: Using short name for 'orient' is deprecated. Only the options: ('dict', list, 'series', 'split', 'records', 'index') will be used in a future version. Use one of the above to silence this warning.\n",
      "  FutureWarning,\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[{'actions': array([ 10.      , -10.      ,  10.      ,  10.      ,  10.      ,\n",
       "         -10.      ,  10.      , -10.      , -10.      , -10.      ,\n",
       "         -10.      , -10.      , -10.      ,  10.      ,  10.      ,\n",
       "          10.      ,  10.      , -10.      ,  10.      , -10.      ,\n",
       "          10.      , -10.      , -10.      , -10.      , -10.      ,\n",
       "          10.      , -10.      ,  -9.828413, -10.      , -10.      ],\n",
       "        dtype=float32), 'date': '2019-01-02'},\n",
       " {'actions': array([ 10.        , -10.        ,  10.        ,  10.        ,\n",
       "          10.        , -10.        ,   3.850093  ,  -3.9357483 ,\n",
       "         -10.        , -10.        , -10.        , -10.        ,\n",
       "         -10.        ,  10.        ,  10.        ,  10.        ,\n",
       "           1.5835118 , -10.        ,  10.        , -10.        ,\n",
       "          10.        , -10.        ,  -2.4617386 , -10.        ,\n",
       "         -10.        ,  10.        , -10.        , -10.        ,\n",
       "         -10.        ,  -0.73332787], dtype=float32), 'date': '2019-01-03'},\n",
       " {'actions': array([ 10.       , -10.       ,  10.       ,  10.       ,  10.       ,\n",
       "         -10.       ,   6.2442074,  10.       , -10.       , -10.       ,\n",
       "         -10.       , -10.       , -10.       ,  10.       ,  10.       ,\n",
       "          10.       , -10.       , -10.       ,  10.       , -10.       ,\n",
       "          10.       , -10.       , -10.       , -10.       , -10.       ,\n",
       "          10.       , -10.       , -10.       , -10.       ,   6.1833515],\n",
       "        dtype=float32), 'date': '2019-01-04'}]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_actions.to_dict(orient = 'rows')[:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "W6vvNSC6h1jZ"
   },
   "source": [
    "<a id='6'></a>\n",
    "# Part 7: Backtest Our Strategy\n",
    "Backtesting plays a key role in evaluating the performance of a trading strategy. Automated backtesting tool is preferred because it reduces the human error. We usually use the Quantopian pyfolio package to backtest our trading strategies. It is easy to use and consists of various individual plots that provide a comprehensive image of the performance of a trading strategy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Lr2zX7ZxNyFQ"
   },
   "source": [
    "<a id='6.1'></a>\n",
    "## 7.1 BackTestStats\n",
    "pass in df_account_value, this information is stored in env class\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Nzkr9yv-AdV_",
    "outputId": "2f2fb484-f7f5-4349-bcfe-f4102349ed85"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==============Get Backtest Results===========\n",
      "Annual return          0.110985\n",
      "Cumulative returns     0.029667\n",
      "Annual volatility      0.073140\n",
      "Sharpe ratio           1.496212\n",
      "Calmar ratio           3.158998\n",
      "Stability              0.445335\n",
      "Max drawdown          -0.035133\n",
      "Omega ratio            1.335208\n",
      "Sortino ratio          2.166967\n",
      "Skew                        NaN\n",
      "Kurtosis                    NaN\n",
      "Tail ratio             1.091193\n",
      "Daily value at risk   -0.008781\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(\"==============Get Backtest Results===========\")\n",
    "now = datetime.datetime.now().strftime('%Y%m%d-%Hh%M')\n",
    "\n",
    "perf_stats_all = backtest_stats(account_value=df_account_value, value_col_name = 'total_assets')\n",
    "perf_stats_all = pd.DataFrame(perf_stats_all)\n",
    "perf_stats_all.to_csv(\"./\"+config.RESULTS_DIR+\"/perf_stats_all_\"+now+'.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9U6Suru3h1jc"
   },
   "source": [
    "<a id='6.2'></a>\n",
    "## 7.2 BackTestPlot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "lKRGftSS7pNM",
    "outputId": "f6b889d6-242e-4f0f-eb0e-954d8a0cc459"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==============Compare to DJIA===========\n",
      "[*********************100%***********************]  1 of 1 completed\n",
      "Shape of DataFrame:  (69, 8)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\"><th>Start date</th><td colspan=2>2019-01-02</td></tr>\n",
       "    <tr style=\"text-align: right;\"><th>End date</th><td colspan=2>2019-04-10</td></tr>\n",
       "    <tr style=\"text-align: right;\"><th>Total months</th><td colspan=2>3</td></tr>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Backtest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Annual return</th>\n",
       "      <td>9.284%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cumulative returns</th>\n",
       "      <td>2.461%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Annual volatility</th>\n",
       "      <td>7.316%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sharpe ratio</th>\n",
       "      <td>1.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calmar ratio</th>\n",
       "      <td>2.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Stability</th>\n",
       "      <td>0.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Max drawdown</th>\n",
       "      <td>-3.513%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Omega ratio</th>\n",
       "      <td>1.28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sortino ratio</th>\n",
       "      <td>1.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Skew</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kurtosis</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tail ratio</th>\n",
       "      <td>1.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Daily value at risk</th>\n",
       "      <td>-0.885%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alpha</th>\n",
       "      <td>-0.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Beta</th>\n",
       "      <td>0.33</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Worst drawdown periods</th>\n",
       "      <th>Net drawdown in %</th>\n",
       "      <th>Peak date</th>\n",
       "      <th>Valley date</th>\n",
       "      <th>Recovery date</th>\n",
       "      <th>Duration</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.51</td>\n",
       "      <td>2019-03-01</td>\n",
       "      <td>2019-03-22</td>\n",
       "      <td>2019-04-04</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.98</td>\n",
       "      <td>2019-04-04</td>\n",
       "      <td>2019-04-10</td>\n",
       "      <td>NaT</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.51</td>\n",
       "      <td>2019-02-05</td>\n",
       "      <td>2019-02-11</td>\n",
       "      <td>2019-02-12</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.35</td>\n",
       "      <td>2019-01-25</td>\n",
       "      <td>2019-01-28</td>\n",
       "      <td>2019-01-30</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.24</td>\n",
       "      <td>2019-01-18</td>\n",
       "      <td>2019-01-22</td>\n",
       "      <td>2019-01-25</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/dist-packages/pyfolio/tears.py:907: UserWarning: Passed returns do not overlap with anyinteresting times.\n",
      "  'interesting times.', UserWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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2XgFAACgQ4Q8AACADhHyAAAAOsQzeQAAMKRaa7nvvvvyi1+s0c76TGIbb7xxttpqq1TVOo8l5AEAwJBasmRJqio77rjjhIQDBqO1lvvvvz9LlizJ7Nmz13k8yzUBAGBIPfTQQ5k9e7aAN+SqKrNnz85DDz00IeMJeQAAMKSWLVuW6dOnD7oMJsD06dOzbNmyCRlLyAMAgCFmFq8bJvLfUcgDAAA2iFNPPTVvetObVtvv2GOPzSmnnJIkueyyy7LDDjus79I6xcYrAADApHLOOecM9Pqnnnpqrr/++lx00UUDrePpMpMHAABMKY8//vhQj786Qh4AALBe/OAHP8hLXvKSbL755jnooINyzz33rDj3pje9KTvssEO22GKL7L///rnuuutWnDvqqKNy4oknPmW8D37wgznkkEOe1Pbud787b3nLW1ZZx1FHHZX58+fn4IMPzmabbZavfvWrWbRoUd7whjdku+22y7x58/JXf/VXSZJLLrkkZ555Zv7u7/4us2bNynOe85wkybx583LJJZesGPP888/Py172shXHVZUPfehDefazn50dd9xxxTLTD33oQ9lxxx2z7bbb5swzz1yLv97TJ+QBAAAT7rHHHstrXvOavPa1r829996bd73rXTn//PNXnD/ooINyww035M4778zee++dI444YrVjHn744bn00ktXhMXWWj796U/nyCOPXO13P/OZz+Sd73xnlixZkle+8pU5+OCD87znPS+33nprLrvssnzkIx/Jl7/85Rx00EF597vfnde//vVZunRpfvKTn6zxPX/xi1/MFVdckVtuuSVJcs899+TWW2/NwoULc8kll+TUU0/Nj370ozUe7+nyTB4AAHTEV77ylQ1ynYMPPni1ff7t3/4tDz74YE488cRMmzYtBx54YA4++OC01pL0ZteWO/XUU7PtttvmwQcfzGabbTbumDvssEMOOOCAXHTRRTnuuOPyrW99K621HHDAAWtU86//+q8nSa699trcfvvtOe2001JVmTdvXo455phcdNFFec1rXrPascZz4oknZptttllxPG3atLz3ve/NRhttlBe96EXZZ5998r3vfS977bXX077GmjCTBwAATLhFixZl5513zrRpv4wcu+22W5LkiSeeyLve9a7svvvumT17dvbYY48kedJyzvEcddRR+dSnPpUkueCCC3LYYYc96Rrj2WWXXVZ8vvnmm3PXXXdlyy23zJw5czJnzpycfvrpufPOO9fqHld1jSTZaqutstFGG6043myzzbJ06dJ1usaaMJMHAAAdsSYzbBvKTjvtlJ/97GdZtmzZihC2fBnjpz/96Xz5y1/OP/3TP2XevHm59957s+22266Y5VuVQw45JMcee2yuueaafP7zn88VV1yxRvWMfg/dLrvskl122SULFixYbd/lZs2alYceemjF8e23375G3xsEM3kAAMCE23fffbPpppvmL//yL/PYY4/lsssuW7GcdOnSpdl4442z9dZb56GHHspJJ520xuNuvPHGedOb3pQjjzwye+yxR573vOetdW0veclLsuWWW+bMM8/Mww8/nCeeeCI//vGPc9VVVyVJtt9++yxcuDDLli1b8Z0XvvCFufDCC/Poo4/m+uuvz7nnnrvW191QhDwAAGDCzZw5M1/+8pfz+c9/PltuuWXe//73r9gF88gjj8y8efOy8847Z6+99srLX/7ytRr7qKOOyg9+8IM12nBlZaZPn56vfvWr+eEPf5iRkZFss802eetb35r7778/SXLooYdmxowZ2XrrrVc8P3fGGWfk9ttvz1ZbbZX58+evdkfPQao1mRJl/aiqeUkWLFiwIPPmzRtsMQAADJ1FixZlp512GnQZG9ydd96ZXXfdNbfddlu23XbbQZczYVb277lw4cKMjIwkyUhrbeGajGMmDwAAGBqttZx11ll57Wtf26mAN5FsvAIAAAyFBx98MNtvv33mzp2br33ta086N2vWrJV+56KLLsqrX/3qDVHepCHkAQAAQ2FVryDYEK8mGBaWawIAAHSIkAcAANAhQh4AAECHCHkAAAAdIuQBAAB0iJAHAAAMjfPPPz8ve9nLBl3GpCbkAQAA68X++++fTTbZJLNmzcrs2bPzq7/6q/n2t7+93q532WWXZYcddpiQsfbff/+cc845EzLWhibkAQAA683ZZ5+dpUuXZvHixXnb296W3/3d301rbdBldZqQBwAArHfTpk3LYYcdlrvvvjt33313/v3f/z377rtv5syZkx133DF//Md/nMcee2xF/+uuuy6//du/na233jrbbbdd/vRP/3Sl455yyil50YtelJtvvjmvetWrctddd2XWrFmZNWtWbrrppixbtix/8Rd/kT322CNbb711Xv/61+fuu+9OkjzyyCM54ogjsvXWW2fOnDl58YtfnNtvvz0nnXRSLr/88hx//PGZNWtWfv/3f3+D/I0mipAHAACsd48//ng++clPZo899sg222yT6dOn56yzzso999yTf/3Xf80ll1ySj370o0mSJUuW5Dd/8zdz4IEH5rbbbsvChQtzyCGHPGm81lre/va357LLLss3v/nN7Lbbbrn44ouz3XbbZenSpVm6dGl23333fOhDH8rnP//5/PM//3MWLVqU7bffPvPnz0+SfPKTn8zixYtz66235t57783HP/7xPOMZz8j73ve+7LfffitmIc8999wN/vdaFzMGXQAAADAxTvrGSRvsWu/7rfetUb8TTjghJ554Yh5++OFMmzYtF154YaZNm5YXvvCFK/rsvvvumT9/fr71rW/luOOOyz/8wz9kq622yp/8yZ+s6LPvvvuu+Pz444/n8MMPz+LFi3PJJZdk0003Hff655xzTs4+++zsuuuuSZLTTjst22+/fR555JHMnDkz9957b2644Ybss88+T6ppmAl5AADAenPWWWfl2GOPzbJly3LFFVfk1a9+dUZGRrLpppvmhBNOyNVXX52HHnoojz/+eF760pcmSW655ZY885nPHHfMm266Kddee20uv/zyVQa8JLn55ptz6KGHZtq0Xy5i3GijjfKzn/0sRxxxRG677ba8+c1vzn333Zc3v/nNOfPMM7PxxhtPzM0PiOWaAADAejdt2rT82q/9Wp71rGfl0ksvzR/+4R/mOc95Tm644Yb8/Oc/z+mnn75iQ5ZddtklN91007hjPfvZz84FF1yQgw8+OD/84Q9XtFfVU/russsu+cpXvpLFixev+HnkkUfyzGc+MzNnzsx73vOe/OhHP8pVV12Vb3zjGyuWZq5srGFhJg8AADpiTZdQDsqVV16ZH//4x9lrr73y2c9+NrNnz86sWbNy3XXX5aMf/Wh23nnnJMmrX/3qnHDCCfnABz6Qt7/97Vm2bFmuueaaJy3ZfMMb3pDHHnssv/Vbv5VLL700e+21V7bffvvcf//9uf/++7PlllsmSY499ticfPLJ+dSnPpWRkZHcc889ufzyy/O6170u3/zmN7PNNtvkec97XmbNmpUZM2asmPHbfvvtVxk0JzMzeQAAwHqzfIfKWbNm5fDDD8973/vevOpVr8oHP/jBfOYzn8nmm2+eY445Jm984xtX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4D7gvcDRzevPADTP2VkOUFXXAicAnwXuAPYDjupq5zQ6M3c3AD8CLvTxCZIkSZL6aV4/QqHfkgwAQ0NDQy7XlCRJkvQow8PDDA4OAgxW1fBkjvGaPEmSJElTVlWsW7eOe++9l4cffrjf3ZmzttlmG3bZZRcWLFiw2W0Z8iRJkiRN2Z133kkSdt11VxYsWLDx5oKavKpi/fr13Hnnney2226b3d58vSZPkiRJ0jS4//772Xnnndl6660NeFOUhIULF/Lggw9OS3uGPEmSJEmbxXC3+abzd2jIkyRJkqQWMeRJkiRJUosY8iRJkiS13pe//GX2339/dtxxR/bcc0++8pWv9LtLM8a7a0qSJElqtcsuu4yTTz6ZCy64gGc/+9nccccdrFu3rt/dmjHO5EmSJElqtQ9+8IN88IMf5OCDD2arrbZit91240lPetKodY899lhOPPFEjjjiCBYuXMiznvUsVq9ezbvf/W522WUX9t57b6666qqN9a+77jpe8IIXsPPOO7PvvvuyYsWKWRrV2Ax5kiRJklprw4YN/OAHP+DOO+9kn332YenSpRx33HGsXbt2zGMuuugiTj31VO644w4WLVrEb//2b7PPPvvw85//nNe+9rW87W1vA+DBBx/kJS95Cc95znP4r//6L77whS/wjne8g+9973uzNbxRpar62oH5LMkAMDQ0NMTAwEB/OyNJkiRNwerVq1m6dOnG9//zkp/M2rnffsSvTVhn9erV7L777hx00EF8/etfZ+HChbzuda9j11135bzzzntU/WOPPZYkG/edffbZfPzjH2doaAiAa6+9lgMPPJBf/OIXXHnllbzyla/k1ltvZcGCBQC8613vYs2aNXz2s5/d5PH0/i4BhoeHGRwcBBisquHJtONMniRJkqTW2mGHHQA46aSTWLZsGUuWLOGUU07hb//2bznxxBNZuHAhCxcu5MQTT9x4zOMf//iNr7fffvtHvX/wwQd54IEHWLVqFcuWLdsY8AAGBgZYtWrVLIxsbN54RZIkSVJrLVmyhCc+8YmjPmz8nHPO4Zxzzply27vvvjs333wzGzZs2Bj0hoeH2X333afc5nQw5EmSJEmaNpNZQjnb/vAP/5CzzjqLF7/4xey444585CMf4WUve9lmt/tbv/VbLFmyhI9+9KO85z3v4cc//jHnnXceX/7yl6eh11Pnck1J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s2rVqo3SlyFPkiRJHYYjeCpVG/O3aciTJEmStlCPPPIIvXr1Wu/9L7jgAsaNG9dsXwcddBAPPvjgBteozc+QJ0mSJLWz448/nm9961trrH/88cepqKigrq5ug48xceJEBg0atNq6CRMmcOWVVzbbfu7cuRxzzDEAXHHFFQwbNmyDa9DmYciTJEmS2tno0aOZOnXqGtdkTZo0idNPP52Kiop2qkxbIkOeJEmS1M5OOeUUli1bxsMPP9ywbsWKFdx99918/vOf55xzzqFnz5707t2bb3zjG3zwwQfN9nPttdfSt29funbtSr9+/bj33nsBmDdvHhdccAFz5syhoqKCiooKVq5cyejRo7nkkkua7au6uppZs2Yxa9Ysxo8fz8yZM6moqGD//fdnxowZHHLIIau1v/nmmznyyCM30ieiDWHIkyRJktrZtttuyxe/+EUmTZrUsO6ee+6he/fuzJw5kzfffJMXXniBOXPm8Oijj3LNNdc020/fvn2ZPXs2S5YsYezYsQwfPpw333yTAw88kAkTJjBw4EDq6uqoq6ujc+fObart+OOP59JLL+W0006jrq6O559/npNOOomFCxfy7LPPNrSbPHkyI0eO3LAPQhuFD0OXJElSx3T5SZvvWFf/bK1NRo8ezTHHHMNNN91ERUUFkyZN4swzz+Taa69lzpw5dOvWjW7dujFu3DguvvjihhumNHbaaac1vB8+fDjjx4/nySef5IQTTtiop9OlSxeGDRvG5MmT6d+/PzU1NTz11FP84he/2KjH0fpxJE+SJEkqAYMGDWKPPfZg5syZvP766/zP//wPJ554Ih988AF77bVXQ7vq6moWLlzYbB8TJ06kf//+VFVVUVVVxfz581m0aNEmqXf06NFMmzaNlStXMnXqVE4++WQqKys3ybG0bhzJkyRJkkrEqFGjuOOOO3jzzTc5/PDD+cQnPsE222zDggULGq6Bq62tZffdd19j3wULFjBmzBgeeughDj/8cDp37szBBx9MZgIb9hy25vYdOHAg3bt358EHH2TKlClcd911692/Ni5DniRJkjqmNkyh3NzOOussLr/8cl588UXGjRtH586dGTZsGJdddhlTpkxhxYoVXHXVVZx55plr7Lt8+XIigp133hmAW2+9lfnz5zds79mzJwsXLuT999+nS5cu61RXz549ue+++1i1ahWdOv1lMuCoUaP45je/yeLFiznuuOPW86y1sTldU5IkSSoRu+++O5/+9Kd5++23+cIXvgDAD3/4Q3baaSf2228/Pvaxj3HEEUc0+0y9fv368fWvf51BgwbRq1cv5s+fz2GHHdawfciQIfTv359dd92VqqoqVq5c2ea6hg4dylZbbcVOO+3EQQcd1LD+rLPOYu7cuQwfPrzNN3LRphf1w7fa/CKiGqipqamhurq6fYuRJEkqc6+//jq77bZbe5dRVj744AN69uzJww8/zIABA9q7nC1ec7/R2tpa+vTpA9AnM2vb0o8jeZIkSZLWyy233MJ+++1nwCsxXpMnSZIkaZ1VV1ezcuVKZsyY0d6lqIkOOZIXEVURcXdELIuIhRHx5VbaXlhssywi7oqINe4LGxE9ImJRRDyxaSuXJEmSSkNtbS2vvvrqatf9qTR0yJAH/DuFUczdgBOAKyPi6KaNIuJvgXHFNrsDWwM3NNPfvwJ/2GTVSpIkSVIbdbiQFxE7AEOBsZm5LDOfAW4Hzmmm+Wjgx5n5TGYuBS4DvhgR2zfq70hgX+DHm7x4SZIkSVqLDhfygP0o3FW08cjbM8DBzbQ9GHi2fiEz5xXf7gsQEdtQGBX8e6DV25QWp4hWN34Bvdf3JCRJkiSpOR3xxisVwNIm6xYDXVtou6TJuiWN2l4CPJiZz0bEoWs57sUUpn5KkiRJ0ibTEUNeHdD05indgGVtbFsJLIuIfShM52zr/WKvByY2WdcbmN3G/SVJkiRprTridM0XgIyIAxutGwA810zb54D+9QsRcQAQwIvAEUAv4IWI+CPwb8DHIuKPEdGlaUeZuTgzaxu/gNc21klJkiRJ6+Ooo45iwoQJZX38Rx55hF69eq33/hdccAHjxo1rtq+DDjqIBx98cINr3Jg6XMjLzOXADODqiOgaEYdQuOnK7c00nwicHRGHRERX4NvAXZn5LnAXsDeFgDgA+Gfg98CAzHx/05+JJEmSyslRRx3FtttuS0VFBZWVlQwcOJDHH3+8vcvqcCZOnMigQYNWWzdhwgSuvPLKZtvPnTuXY445BoArrriCYcOGbfIa16bDhbyi+hulvAHMAq7IzIcjYs+IqIuIPQEy8wHg6mKbN4BVwFeK21Zk5h/rXxSu1fuw+F6SJElaZ9dffz11dXUsXryYc845h89//vNktnp/vy1WZrJy5cr2LqMsdciQV5w6OTQzKzJzt8y8qbj+leK6Vxq1vaHYpiIzv1B8lEJzfU7MzEHNbZMkSZLWRadOnRgxYgRvvfUWb731FgCrVq3iu9/9Lvvssw877bQTp512WsO22tpaIoLJkyfTp08fdtxxRy688MLVAuLtt9/OQQcdRNeuXdl///2ZPfsvt4ZYuHAhRx99NF27duXwww/npZdeatgWEdx4443st99+VFRU8K1vfYsFCxYwePBgKisrOeWUU3j33XcBWLp0KSeeeCK77LILO+64IyeddBILFy5s6Ouoo47ikksuYfDgwWy//fb8/ve/X+2833rrLT7xiU9w+eWXr/GZ3HXXXfTv33+1dbfccguf+tSnGo59zjnn0LNnT3r37s03vvENPvjgg2Y/32uvvZa+ffvStWtX+vXrx7333gvAvHnzuOCCC5gzZw4VFRVUVFSwcuVKRo8ezSWXXNJsX9XV1cyaNYtZs2Yxfvx4Zs6cSUVFBfvvvz8zZszgkEMOWa39zTffzJFHHtlsXxtLhwx5kiRJUin76KOPmDRpEvvssw89evQA4IYbbmDGjBk89NBDvP766/Ts2ZMxY8astt8DDzzAc889x1NPPcX06dO57777AJg5cyZjx47ltttuY+nSpdx///3suuuuDfvdcccd3HDDDfz5z39mzz335Fvf+tZq/d533308+eSTzJkzhx/84AeMHDmS22+/nddee42XXnqJH/+48MjoVatWcfbZZ1NbW8uCBQvYeuutueiii1bra8qUKdx4443U1dXRr1+/hvWvvvoqRx55JCNGjODqq69e4zM5+eSTqampYe7cuQ3rpk2bxogRIwD46le/yptvvskLL7zAnDlzePTRR7nmmmua/Xz79u3L7NmzWbJkCWPHjmX48OG8+eabHHjggUyYMIGBAwdSV1dHXV0dnTt3bv3LKjr++OO59NJLOe2006irq+P5559vCLnPPtvwVDYmT57MyJEj29Tn+uqId9eUJEmSmD59+mY71hlnnNGmdl/72te45JJLWLFiBZ06dWLatGl06lQYl5kwYQLXX389e+65JwBXXnklPXv25L333mvY/6qrrmKHHXagT58+DBkyhKeeeorPfvaz3HLLLXz9619vuNasurp6teOeffbZHHxw4bHRI0eOXCOY/eM//iOVlZVUVlbSv39/hgwZwr777gvAZz/7WZ5++mkAqqqqOO200xr2u/TSS/nMZz6zWl8jR45sGN2qD1DPP/881157LZdffjlnn312s5/Ndtttx6mnnsrUqVMZP348Cxcu5IknnmDmzJmsXLmS6dOnM2fOHLp160a3bt0YN24cF198ccMNUxprXOPw4cMZP348Tz75JCeccEKzx15fXbp0YdiwYUyePJn+/ftTU1PDU089xS9+8YuNepymHMmTJEmSSsR1113H4sWLWbFiBQ888ABnn302zzzzDAALFixg6NChVFVVUVVVxb777ss222yz2nTIxnd93GGHHairqwPglVdeoW/fvi0et6X96vXs2bPh/XbbbbfGcn375cuXc95557HnnntSWVnJkCFDWLRo0Wp97bHHHmscf9q0aXTv3p3hw4e3/OEAI0aMYPr06WQmd955J8ceeyzdu3dn0aJFfPDBB+y1114Nbaurq1f7bBqbOHEi/fv3b/gs58+fv0adG8vo0aOZNm0aK1euZOrUqZx88slUVjZ9StvGZciTJEmSSkynTp044ogj2HfffRtuz7/HHnvws5/9jMWLFze83nvvvVbDW7099thjtevsNpXvf//7vPDCC/z2t79l6dKlPPTQQ2u0iYg11l1++eVUV1dz+umnt3gdHcCnP/1pVqxYwa9//evVpmr26NGDbbbZhgULFjS0ra2tZffdd1+jjwULFjBmzBhuvPFG3n77bRYvXswBBxzQcP1ic/W1VXP7Dhw4kO7du/Pggw8yZcoUzjrrrPXuv62crilJkqQOqa1TKNvLE088wR/+8AcOOuggoPCstrFjx3LHHXfQp08fFi1axOzZszn11FPX2td5553HxRdfzODBgxk4cCCvvPIKH374Ifvss89Grbmuro7tttuOqqoq3n77ba666qo27bfVVlsxffp0hg4dyhe+8AV+8pOfsPXWW6/RrnPnzgwbNowrr7ySF198kZNOOmm19ZdddhlTpkxhxYoVXHXVVZx55plr9LF8+XIigp133hmAW2+9lfnz5zds79mzJwsXLuT999+nS5c1Hn/dqp49e3LfffexatWqhmm2AKNGjeKb3/wmixcv5rjjjlunPteHI3mSJElSibj44osb7up45pln8u1vf7vhmraLLrqIU089leOPP57Kyko++clP8utf/7pN/Q4dOpRx48YxcuRIunbtynHHHccf/7jxn/x18cUX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Pve5z3Hsscdy2GGHsWLFCh577DEGDRrEjjvuuMaxli9fTkQ0hK1bb711tccPfPGLX+S6667jxBNPZOedd+aKK65o2NapUyfOP/98vva1r3HTTTfRs2dPFi5cyLPPPstnP/vZZs+tpbpHjBjB6aefzvDhwznkkEO49tprqays5LDDDlujj7q6OiorK6moqGDevHn86Ec/Wi0M9uzZk5dffpkDDjigDZ/2X+y888506tSJl19+mX79+jWsP+uss7j66qt58sknm52GWuqcrilJkiS1s4kTJzJq1Cj22msvevXq1fC66KKLmDFjBnV1dQwYMIBdd92VefPmccoppzTs+4lPfILbbruNiy66iO7du7PPPvtw6623tnisfv368fWvf51BgwbRq1cv5s+fv1qwOu+88/jc5z7HwIED2X///TnqqKMAGsLntddeywEHHMDhhx9OZWUlxxxzDPPmzWvxeC3VffTRR3PttdcyfPhwdtllFx566CF+9rOfsfXWW6/Rx/e+9z2mT59O165d+dKXvtQw5bPeFVdcwbnnnktVVdVqN01Zm+23357LLruMI488kqqqKh599FEAevXqxeDBg1m6dCnHH398m/srFeFzMtpPRFQDNTU1NatdCCtJkqSN7/XXX2e33XZr7zK2OPPmzeOggw7ivffeY5tttmnvcjabL3/5y2yzzTZcf/31m+2Yzf1Ga2tr62+C0ycza9vST4ccyYuIqoi4OyKWRcTCiPhyK20vLLZZFhF3RURlcX2XiLgtIhYUtz0bESdvvrOQJEmSNr4VK1bw85//nA8//JBFixbxjW98gxNPPLFDBbzXXnuNO++8kzFjxrR3KeulQ4Y84N8pXI+4G3ACcGVEHN20UUT8LTCu2GZ3YGvghuLmrYBXgSOBbsAlwLSIWP9J3ZIkSVI7y0yuuuoqunfvzv7778+2227b8Ey6juDyyy/ngAMO4MILL1ztOr0tSYebrhkROwB/Bg7NzD8U130X2C0zz2rSdiqwMDO/WVw+EHga6J6Z79JERDwFfD8zp7axlmqcrilJkrRZOF1TpW5jTdfsiHfX3I9CuP1Do3XPAMc20/Zg4L/rFzJzXvE2q/sCzzZuGBE7AwcCc5s7aERUAVVNVvde1+IlSZIkqTUdMeRVAEubrFsMdG2h7ZIm65Y0bRsRWwFTgLsy85kWjnsxhamfkiRJ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PUOeJEmSpF5lzJgxbL755px44oncc889LFy48A3rFy5cyJw5c5g5cyb33XcfEyZM4KmnngKKp1heddVVLFy4kJ///Ofcd999XH/99W/Y/s477+Thhx9m9uzZHcvuuOMOHnnkEZ544gnuv/9+vvrVrwLw2GOPcfLJJ3PdddfxwgsvcM4553DsscdusK9D6I7IzIbtvK+LiJHAjBkzZjBy5MjGFiNJkiTVeO6559h+++3/suDzx268nV9291qbTJ8+nSuuuIIHHniAuXPncvDBB3PDDTcwZ84cjjjiCJYuXcqmm24KwH777ce5557LiSeeuEo/V155Jb/85S/59re/DRSjdvfffz9HHHFER5uI4O677+aYY44B4IYbbmDy5Mn8/Oc/56yzzqK1tZXLL7+8o/0ee+zBVVddxZFHHrlOh73KZw7MnDmTUaNGAYzKzJld6ceRPEmSJEm9zpgxY5g4cSKzZs3i2WefpX///px00kkADBo0qCPgAWy11VYsXboUgN///vccffTRDBkyhJaWFi655JJVRgKHDx++yv5ql40YMYLnnnsOgFmzZnHNNdd0PACmtbWVGTNmdKxvBEOeJEmSpF5txIgRnHPOOfzud79ba9uzzjqLXXbZhaeffpolS5Zw6aWXUj+7sbPvrJszZ07H77Nnz+4YcRs+fDif+9znWLRoUcdr+fLlnHLKKet5VN3X+x4VI0mSJGnj68IUyo1l2rRp3H333Rx//PEMHz6c559/nokTJ3LAAQesddulS5fS0tLCgAEDmDp1Ktdffz077LDDWre78sorOfDAA1mxYgVf+cpXOPPMMwE47bTTOO644zjiiCPYf//9WbFiBQ899BDjxo1jm222We9j7Q5H8iRJkiT1KgMHDuRXv/oVBx54IAMHDmTs2LEMGDCAyZMnr3XbK6+8kltvvZWBAwdyxhlncPzxx3dpn+9973vZb7/9eNvb3sZhhx3GJz7xCQD23XdfbrzxRs4991wGDRrETjvtxMSJE9fr+NaXD15pIB+8IkmSpGbV2UNA+qqIYOrUqey66649uh8fvCJJkiRJWoUhT5IkSZIqpE+GvIhojYjbI6ItIuZFxCfW0Pbssk1bRNwWES2dtBkcEQsj4hc9W7kkSZKkjS0ze3yq5obUJ0Me8J8UTxbdHjga+GJEHFLfKCIOB75QttkB2AS4tpP+/h34vx6rVpIkSZK6qM+FvIjYCvggcHFmtmXm48BNwMc6af5R4OuZ+XhmLgEuAo6PiC1r+nsnsDPw9R4vXpIkSZLWos+FPGAMxVNFa0feHgf27KTtnsAT7W8yc2r5684AEbEpxajgJ4E1Pqa0nCI6svYFDOvuQUiSJElSZ/ril6EPAJbULVsEDFxN28V1yxbXtL0AeDAzn4iIfday3/Mopn5KkiRJUo/piyFvKVBMYIJTAAAgAElEQVT/8JStgbYutm0B2iJiJ4rpnGO7uN+rgUl1y4YBU7q4vSRJkiStVV8MedOBjIjdaqZfjgWe7KTtk8DewC0AEbErEMDTwN8DQ4DpEQGwBbBFRCwARmTmy7UdZeYiihHDDuV2kiRJkrTB9Ll78jJzGfAd4LKIGBgRe1E8dOWmTppPAk6JiL0iYiDwJeC2zFwO3Aa8lSIgjgUuAX4HjK0PeJIkSZJ6xrve9S622mor2to6m5jXN/W5kFdqf1DKfOA+YEJm/iQidoyIpRGxI0BmPgBcVraZD6wEzinXrcjMBe0vinv1Xi1/lyRJktTD5s2bx4MPPsjmm2/O7bffvkH7fv3118lc47MVm1afDHmZuSgzP5iZAzJz+8y8rlw+u1w2u6bttWWbAZn59+VXKXTW56TMHLexjkGSJEnq6775zW8yduxYzjzzTCZPnszLL7/MNttsw2OPPdbRpq2tjS233JJnnnkGgHvuuYd99tmH1tZWxo0bx29+85uOtiNHjuTyyy9n7NixbLnllixevJgrrriC0aNHM3DgQHbffXe+//3vd7RfuXIlF1xwAdtttx3Dhg1j0qRJRATTpk0D4OWXX+b8889nxIgRbLfddpx66qksW7asxz+XPhnyJEmSJPV+kydP5oQTTuCEE07gZz/7GfPmzeP9738/t9xyS0eb7373u+y9996MHj2axx57jJNPPpnrrruOF154gXPOOYdjjz2W5cuXd7S/5ZZbuOuuu1iyZAktLS2MHj2aKVOmsHjxYi6++GI+/OEP88c//hGAG2+8kTvuuINf/vKXTJs2jfvvv/8N9V1wwQU89dRT/PrXv+bZZ59l4cKFXHzxxT3+uURvHYKsgvK78mbMmDGDkSNHNrYYSZIkqcZzzz3H9ttv/4Zl3/zf6Xzroae7tP1R+wznvGP2esOyq3/wW+59bM5qtznxHTtz0jvHdKn/X/ziFxx00EHMnTuXIUOG8Fd/9Vcce+yxHHzwwXzkIx9h1qxZvOlNb+LII4/k2GOP5eyzz+ass86itbWVyy+/vKOfPfbYg6uuuoojjzySkSNHcuGFF3L66aevdr977rkn//Zv/8bRRx/NoYceyvve9z7OPvtsAJ5++mnGjBnD1KlT2WWXXRgwYAC/+c1v2GWXXQB49NFHefe73838+fM77buzz3zmzJmMGjUKYFRmzuzKZ+NIniRJkqReZ9KkSRx66KEMGTIEgBNOOIFvfOMbvOMd7yAzeeihh/jTn/7EQw89xPHHHw/ArFmzuOaaa2htbe14zZgxg+eee66j3+HDh6+yn7333ruj/bRp01i4cCFQhLLa9jvuuGPH788//zzLly9n//3379j2sMMOY9GiRbz66qs99rlA3/wKBUmSJEm92EsvvcRtt93Gq6++2hHyXnnlFV588UWmTJnCP/zDP3DzzTez1157ccghh7DtttsCRYD73Oc+xxe+8IXV9l37NWezZs3i9NNP53/+53844IAD6NevH3vuuWfHA1m233575sz5y8jk7Nkdj/Zg8ODBbLHFFjzxxBOMGDFigx7/2hjyJEmSJHXJSe8c0+XplJ0575i9VpnC2R133XUXmclTTz3FZptt1rH89NNPZ9KkSZx33nkceuihPPbYY3z605/uWH/aaadx3HHHccQRR7D//vuzYsUKHnroIcaNG8c222yzyn6WLVtGRHSExIkTJ3Y8VAXg+OOP56qrruKYY45h2223ZcKECR3r3vSmN3Haaafxmc98huuuu463vOUtzJs3jyeeeIK/+7u/W+/PYE2crilJkiSpV5k0aRInn3wyI0aMYMiQIR2vc889l+985zvstNNODB06lKlTp/Ke97ynY7t9992XG2+8kXPPPZdBgwax0047MXHixNXuZ/fdd+ezn/0s48aNY8iQIUybNo3999+/Y/2pp57Kcccdx3777ccuu+zCwQcfDNARPK+44gp23XVXDjjgAFpaWjjssMOYOnVqz3woNXzwSgP54BVJkiQ1q84eAqI1mzp1KnvssQcvvfQSm2666Tpv74NXJEmSJKmBVqxYwQ9+8ANeffVVFi5cyD/+4z9yzDHHdCvgbUiGPEmSJEnqhszk0ksvZdCgQeyyyy5svvnmXH/99Y0uywevSJIkSVJ3bLnlljzyyCONLmMVjuRJ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1pIkSWoLQ54Gzpo1a3jlK1/JnDlz2H///dd7fBJ+9rOfAfC2t72NI488clOXKEmSJA0sJ17RRnnxi1/MpZdeysyZM9lss83YY489OPHEE9l11103qJ+jjjqKn/3sZ/zzP//zI23/9m//xvLly7ntttuYNWvWBvV30kknbdDxkiRJUts4kqeNdsIJJ7B69WpuuOEG5s2bxyGHHLJB5z/00EOjtt9www087WlP2+CAJ0mSJMmQp0mw5ZZbctBBB/GTn/yEa665hpe85CXMmzePXXfdlSVLljxy3FFHHcWrXvUqDj74YObMmcPHP/5xjjvuOL7yla+w5ZZbsuuuu3L44YdzzDHHPNL26U9/mqriIx/5CAsXLmSbbbbh1a9+NTfffPOotRxyyCEcdthhj2wvWbKEXXfdlXnz5vGSl7yEa665ZlP/OSRJkqS+8nZNTdjdd9/NF77wBZ71rGfxile8goMOOohvfOMb/OhHP+L3fu/3WLhwIfvssw8AX/va1/jSl77EkiVLuP/++7nvvvsec7vmrFmzHtW2ZMkSTj75ZL71rW+x00478c53vpMDDzyQCy+8cJ11XXTRRbzrXe/inHPO4bnPfS4f/vCH2X///bnyyisdJZQkSVJrGfKGxNFnX8VPV9y9Sa/xjB1mc+T+zxz38e9617t473vfyxZbbMFee+3FRz/6UV796ldz+OGHM2PGDPbcc0/e+MY38oUvfOGRkLfHHnvwx3/8xwBsscUW47rO6aefzuLFi3na054GwMc//nG23nprli9fzvz589d53iGHHMKee+4JwOGHH84//MM/cNlll/HCF75w3O9TkiRJGiberqmNdvzxx3PnnXeyYsUKzjzzTFasWMH8+fMftb7fggULuPHGGx/Z3mmnnTb4OjfeeCM777zzI9tz5sxh3rx5j+p3POfNmDGDnXbaab3nSZIkScPMkbwhsSEjbP2y4447snz5ch5++OFHgt6yZcvYcccdHzmmdz268axPt+OOO3LDDTc8sn333Xdz5513Pqrf8Zy3du1afvnLX673PEmSJGmYOZKnSbPXXnsxd+5cPvShD/HAAw9w+eWX8/nPf56DDjpozHOe/OQns2zZMtauXTvmMa997Ws58cQTufbaa1mzZg3vec97WLRo0Tpv1Rw577TTTuPyyy/ngQce4LjjjmP27NnstddeG/0eJUmS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",
      "text/plain": [
       "<Figure size 1008x5184 with 13 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"==============Compare to DJIA===========\")\n",
    "%matplotlib inline\n",
    "# S&P 500: ^GSPC\n",
    "# Dow Jones Index: ^DJI\n",
    "# NASDAQ 100: ^NDX\n",
    "backtest_plot(df_account_value, \n",
    "             baseline_ticker = '^DJI', \n",
    "             baseline_start = df_account_value.date.values[0],\n",
    "             baseline_end = df_account_value.date.values[-1], value_col_name = 'total_assets')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SlLT9_5WN478"
   },
   "source": [
    "<a id='6.3'></a>\n",
    "## 7.3 Baseline Stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "YktexHcqh1jc",
    "outputId": "56f1bbee-7ff2-4be2-da0a-d8ef77c43f5b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==============Get Baseline Stats===========\n",
      "\r[*********************100%***********************]  1 of 1 completed\n",
      "Shape of DataFrame:  (69, 8)\n",
      "Annual return           0.514681\n",
      "Cumulative returns      0.120401\n",
      "Annual volatility       0.134372\n",
      "Sharpe ratio            3.204107\n",
      "Calmar ratio           18.205313\n",
      "Stability               0.754409\n",
      "Max drawdown           -0.028271\n",
      "Omega ratio             1.783684\n",
      "Sortino ratio           5.339887\n",
      "Skew                         NaN\n",
      "Kurtosis                     NaN\n",
      "Tail ratio              1.684077\n",
      "Daily value at risk    -0.015221\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "#baseline stats\n",
    "print(\"==============Get Baseline Stats===========\")\n",
    "baseline_df = get_baseline(\n",
    "        ticker=\"^DJI\", \n",
    "        start = df_account_value.loc[0,'date'],\n",
    "        end = df_account_value.loc[len(df_account_value)-1,'date'])\n",
    "\n",
    "stats = backtest_stats(baseline_df, value_col_name = 'close')"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [
    "uijiWgkuh1jB",
    "MRiOtrywfAo1",
    "_gDkU-j-fCmZ",
    "3Zpv4S0-fDBv"
   ],
   "name": "FinRL_demo_docker.ipynb",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
